21.05.2018 F# hello wordl: почему два оператора вместо одного?
 
let Привет |>

Начал на досуге глядеть в F# туториалы, и само собой полезли нубские вопросы. Скажем, работа с коллекциями:

// ------ Lists ------
let twoToFive = [2; 3; 4; 5]        // Square brackets create a list with
                                 // semicolon delimiters.
let oneToFive = 1 :: twoToFive   // :: creates list with new 1st element
// The result is [1; 2; 3; 4; 5]
let zeroToFive = [0; 1] @ twoToFive   // @ concats two lists


Внутренний перфекционист спрашивает: а зачем два оператора, :: и @, если можно было бы оставить и один из них?

  1. @-оператор требует всегда превращать одиночный элемент в коллекцию из одного элемента, наподобие [1] @ twoToFive
  2. cons-оператор (два двоеточия) ещё и запрещает переставлять аргументы местами (слева всегда должен быть одиночный элемент, а справа — коллекция).

Собственно, вопрос: в каких ситуациях может возникнуть та самая двусмысленность, из-за которой и пришлось ввести два разных оператора? Или это просто "исторически сложилось"?

21.05.2018 Nuget .net core+.net framework
 
Здравствуйте,
Можно ли из .net core проекта/библиотеки сделать nuget пакет, сразу для .net core и .net framework?
Или надо создавать отдельно файл проекта для .net framework?

18.05.2018 посоветуйте хорошую книгу по сишарпу
 
приветствую

коллеги, порекомендуйте хорошую актуальную книгу по сишарпу. последние несколько лет я не следил за новинками, потому хочется освежить знания

идеальная книга — это
1. на русском языке
2. в электронном виде, чтобы можно было скачать
3. самая последняя версия языка и фрэймворка (или близко к ней)

пункт 1 не обязателен, но желателен. потому что не хочется тратить усилия на перевод, а все внимание сконцентрировать на сути.

спасибо

17.05.2018 Объясните насчет переопределения Equals(object)
 
Копаюсь в чужом коде

Вижу:

class TMy
{
 //....

 public override bool Equals(object obj)
 {
  if (ReferenceEquals(null, obj))
   return false;

  if (ReferenceEquals(this, obj))
   return true;

  return obj.GetType() == GetType() && Equals((TMy)obj);
 }

 public override int GetHashCode()
 {
  unchecked
  {
   //BLA-BLA-BLA
   return hashCode;
  }
};//class TMy


Объясните, плиз — зачем здесь влепили Equals(object)?

По-моему по умолчанию он делает ровно тоже самое. Не?

У меня из башки уже выветрились все эти нюансы.

Вроде было, что если переопределяешь GetHashCode, то нужно переопределить Equals.

Я попробовал закомментрировать этот Equals — все собралось (VS2017, .FW4.6.2)

17.05.2018 Два вопроса про PackageReference
 
1. смысл такой (PackageReference) записи в файле проекта (.csproj) состоит в том, чтобы msbuild при вызове компилятора добавил ключ -r:
Мой вопрос: какой именно .dll файл будет добавлен как Reference (или будут добавлены все/не все из пакета?)

2. Версия пакета — это строка (например может быть "2.3.1-beta") а версия сборки — это четыре числа.
Вопрос: где определяется формат строки формально. Мне это нужно, чтобы версии сравнивать между собой (на больше/меньше).
UPD:
https://docs.microsoft.com/en-us/nuget/reference/package-versioning#version-ranges-and-wildcards

16.05.2018 [Опрос] Ваши отношения с .Net Core
 
Пытаюсь понять взлетело оно или нет. Опрос: http://rsdn.org/poll/6538
Автор: Shmj
Дата: 16.05 21:13
Вопрос: В каких отношениях вы состоите с .Net Core

16.05.2018 net core 2 console app + linux
 
Вопрос из серии "что я делаю не так":

dotnet --info
.NET Core SDK (reflecting any global.json):
 Version:   2.1.300-rc1-008673
 Commit:    f5e3ddbe73

Runtime Environment:
 OS Name:     centos
 OS Version:  7
 OS Platform: Linux
 RID:         centos.7-x64
 Base Path:   /usr/share/dotnet/sdk/2.1.300-rc1-008673/

Host (useful for support):
  Version: 2.1.0-rc1
  Commit:  eb9bc92051

.NET Core SDKs installed:
  2.1.300-rc1-008673 [/usr/share/dotnet/sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.All 2.1.0-rc1-final [/usr/share/dotnet/shared/Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.1.0-rc1-final [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 2.1.0-rc1 [/usr/share/dotnet/shared/Microsoft.NETCore.App]

To install additional .NET Core runtimes or SDKs:
  https://aka.ms/dotnet-download


dotnet restore проходит без ошибок

dotnet build
Microsoft (R) Build Engine version 15.7.177.53362 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  Restore completed in 76.1 ms for /home/user/4/examples/Hello/Hello.csproj.
  You are working with a preview version of the .NET Core SDK. You can define the SDK version via a global.json file in the current project. More at https://go.microsoft.com/fwlink/?linkid=869452
/tmp/.NETCoreApp,Version=v2.0.AssemblyAttributes.cs(4,20): error CS0400: The type or namespace name 'System' could not be found in the global namespace (are you missing an assembly reference?) [/home/user/4/examples/Hello/Hello.csproj]
obj/Debug/netcoreapp2.0/Hello.AssemblyInfo.cs(10,12): error CS0246: The type or namespace name 'System' could not be found (are you missing a using directive or an assembly reference?) [/home/user/4/examples/Hello/Hello.csproj]
obj/Debug/netcoreapp2.0/Hello.AssemblyInfo.cs(11,12): error CS0246: The type or namespace name 'System' could not be found (are you missing a using directive or an assembly reference?) [/home/user/4/examples/Hello/Hello.csproj]
obj/Debug/netcoreapp2.0/Hello.AssemblyInfo.cs(12,12): error CS0246: The type or namespace name 'System' could not be found (are you missing a using directive or an assembly reference?) [/home/user/4/examples/Hello/Hello.csproj]
obj/Debug/netcoreapp2.0/Hello.AssemblyInfo.cs(13,12): error CS0246: The type or namespace name 'System' could not be found (are you missing a using directive or an assembly reference?) [/home/user/4/examples/Hello/Hello.csproj]
obj/Debug/netcoreapp2.0/Hello.AssemblyInfo.cs(14,12): error CS0246: The type or namespace name 'System' could not be found (are you missing a using directive or an assembly reference?) [/home/user/4/examples/Hello/Hello.csproj]
obj/Debug/netcoreapp2.0/Hello.AssemblyInfo.cs(15,12): error CS0246: The type or namespace name 'System' could not be found (are you missing a using directive or an assembly reference?) [/home/user/4/examples/Hello/Hello.csproj]
obj/Debug/netcoreapp2.0/Hello.AssemblyInfo.cs(16,12): error CS0246: The type or namespace name 'System' could not be found (are you missing a using directive or an assembly reference?) [/home/user/4/examples/Hello/Hello.csproj]
/tmp/.NETCoreApp,Version=v2.0.AssemblyAttributes.cs(4,71): error CS0518: Predefined type 'System.String' is not defined or imported [/home/user/4/examples/Hello/Hello.csproj]
/tmp/.NETCoreApp,Version=v2.0.AssemblyAttributes.cs(4,99): error CS0246: The type or namespace name 'FrameworkDisplayName' could not be found (are you missing a using directive or an assembly reference?) [/home/user/4/examples/Hello/Hello.csproj]
/tmp/.NETCoreApp,Version=v2.0.AssemblyAttributes.cs(4,122): error CS0518: Predefined type 'System.String' is not defined or imported [/home/user/4/examples/Hello/Hello.csproj]
obj/Debug/netcoreapp2.0/Hello.AssemblyInfo.cs(10,55): error CS0518: Predefined type 'System.String' is not defined or imported [/home/user/4/examples/Hello/Hello.csproj]
obj/Debug/netcoreapp2.0/Hello.AssemblyInfo.cs(11,61): error CS0518: Predefined type 'System.String' is not defined or imported [/home/user/4/examples/Hello/Hello.csproj]
obj/Debug/netcoreapp2.0/Hello.AssemblyInfo.cs(12,59): error CS0518: Predefined type 'System.String' is not defined or imported [/home/user/4/examples/Hello/Hello.csproj]
obj/Debug/netcoreapp2.0/Hello.AssemblyInfo.cs(13,68): error CS0518: Predefined type 'System.String' is not defined or imported [/home/user/4/examples/Hello/Hello.csproj]
obj/Debug/netcoreapp2.0/Hello.AssemblyInfo.cs(14,55): error CS0518: Predefined type 'System.String' is not defined or imported [/home/user/4/examples/Hello/Hello.csproj]
obj/Debug/netcoreapp2.0/Hello.AssemblyInfo.cs(15,53): error CS0518: Predefined type 'System.String' is not defined or imported [/home/user/4/examples/Hello/Hello.csproj]
obj/Debug/netcoreapp2.0/Hello.AssemblyInfo.cs(16,55): error CS0518: Predefined type 'System.String' is not defined or imported [/home/user/4/examples/Hello/Hello.csproj]
Program.cs(1,7): error CS0246: The type or namespace name 'System' could not be found (are you missing a using directive or an assembly reference?) [/home/user/4/examples/Hello/Hello.csproj]
Program.cs(2,7): error CS0246: The type or namespace name 'System' could not be found (are you missing a using directive or an assembly reference?) [/home/user/4/examples/Hello/Hello.csproj]
Program.cs(3,7): error CS0246: The type or namespace name 'System' could not be found (are you missing a using directive or an assembly reference?) [/home/user/4/examples/Hello/Hello.csproj]
Program.cs(4,7): error CS0246: The type or namespace name 'System' could not be found (are you missing a using directive or an assembly reference?) [/home/user/4/examples/Hello/Hello.csproj]
/tmp/.NETCoreApp,Version=v2.0.AssemblyAttributes.cs(2,7): error CS0246: The type or namespace name 'System' could not be found (are you missing a using directive or an assembly reference?) [/home/user/4/examples/Hello/Hello.csproj]
/tmp/.NETCoreApp,Version=v2.0.AssemblyAttributes.cs(3,7): error CS0246: The type or namespace name 'System' could not be found (are you missing a using directive or an assembly reference?) [/home/user/4/examples/Hello/Hello.csproj]
obj/Debug/netcoreapp2.0/Hello.AssemblyInfo.cs(7,7): error CS0246: The type or namespace name 'System' could not be found (are you missing a using directive or an assembly reference?) [/home/user/4/examples/Hello/Hello.csproj]
obj/Debug/netcoreapp2.0/Hello.AssemblyInfo.cs(8,7): error CS0246: The type or namespace name 'System' could not be found (are you missing a using directive or an assembly reference?) [/home/user/4/examples/Hello/Hello.csproj]
Program.cs(9,18): error CS0518: Predefined type 'System.Object' is not defined or imported [/home/user/4/examples/Hello/Hello.csproj]
Program.cs(11,33): error CS0518: Predefined type 'System.String' is not defined or imported [/home/user/4/examples/Hello/Hello.csproj]
Program.cs(11,23): error CS0518: Predefined type 'System.Void' is not defined or imported [/home/user/4/examples/Hello/Hello.csproj]

Build FAILED.


сам проект — ерунда:
cat Hello.csproj
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <AssemblyName>Hello</AssemblyName>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <OutputType>Exe</OutputType>
  </PropertyGroup>

</Project>


cat Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace Test
{
    public class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("wellcome to dark side!");
        }
    }
}



Под виндой все работает... но там рантаймов больше. Еще стоят

sdk:
  1.1.9 [C:\Program Files\dotnet\sdk]
  2.1.3 [C:\Program Files\dotnet\sdk]

runtimes:
  Microsoft.NETCore.App 1.0.11 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 1.1.8 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.0.4 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.0.7 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]

10.05.2018 Как аутентифицироваться в ЕСИА в десктопном приложении
 
Собственно сабж. Вижу библиотеку в Nuget, но она для веба.
Интересуют способы аутентификации как физлица по логину/паролю, так и юрлица, который прошел регистрацию в минкомсвязи

09.05.2018 Строка на основе BitArray
 
Русские символы в Unicode кодируются двумя байтами. Но если составить таблицу символов для некорого текста, может оказаться, что 6-ти или 7-ми битов вполне достаточно для кодирования любого символа этого текста.

Не приходила ли кому идея сделать класс строки на основе BitArray для того, чтобы сэкономить на хранении текстов в памяти?

08.05.2018 Новый хайп микрософта - Intelli-чоугодно! :)
 
На этот раз — IntelliCode!

12 лет эти кодеры кормили нас убогим алфавитным списком IntelliSense; просто вдумайтесь — 250 дней в год каждый из этих клоунов приходил на работу, писал код и скроллировал этот Intelli-ТУПЕЙШИЙ список членов класса, захламлённый ключевыми словами, кодоснипетами и ещё бог-весть чем. Неужели ни один из них не задумался, что это неудобно? Неужели ни разу им не понадобилось отсеять проперти или показать только члены наипоследнего класса иерархии? Это не говоря уже просто про статистически частые члены класса (куда уж проще!). Нет, ничего этого даже в планах не было! Зато теперь у нас есть "темы", "автотесты" и менеджер сниппетов!
И вот теперь эти же люди вылезают с новыми intelli-идеями , заскочив в последний вагон AI-поезда! Причём даже тут они тупят по-чёрному, ибо даже студенту очевидно — НЕ БУДЕТ ни один AI работать правильно на задаче, к которой он не приспособлен. А задачи у всех свои. А АИ — один. Ну вот какой логикой надо обладать, чтоб грести всех под одну гребёнку?? Я больше скажу (держитесь за стул) — они "обучали" АИ на.... коде с ГИТХАБА!! Вот уж помойка так помойка, лучше и не найти! Аспиранты, сварщики, дворники — все, кто мог написать патч, все там. И весь этот хлам будет "советником программиста"!!
Я фигею... неужели у MS настолько тупые кодеры, что даже бестолковейший АИ для них — божья помощь?? Капец... мой мир не будет прежним!

08.05.2018 Сборка roslyn
 
Попытался скачать Roslyn и собрать. Но при запуске Restore.cmd летят исключения и т.п.

Это Роскомнадзор и https://dotnetcli.azureedge.net на всякий пожарный забанил?

Кто нибудь знает, как собрать Розлин в данных условиях?

Добавлено. VPN запрещен политикой безопасности. Так что этот путь не катит. Еще идеи есть?

C:\roslyn>Restore.cmd
Repo Dir C:\roslyn
Binaries Dir C:\roslyn\Binaries
Downloading CLI 2.1.300-preview2-008324
dotnet-install: Downloading link: https://dotnetcli.azureedge.net/dotnet/Sdk/2.1.300-preview2-008324/dotnet-sdk-2.1.300-preview2-008324-win-x64.zip
dotnet-install: Cannot download: https://dotnetcli.azureedge.net/dotnet/Sdk/2.1.300-preview2-008324/dotnet-sdk-2.1.300-preview2-008324-win-x64.zip
dotnet-install: Downloading legacy link: https://dotnetcli.azureedge.net/dotnet/Sdk/2.1.300-preview2-008324/dotnet-dev-win-x64.2.1.300-preview2-008324.zip
Exception calling "Invoke" with "0" argument(s): "Failed to download https://dotnetcli.azureedge.net/dotnet/Sdk/2.1.300-preview2-008324/dotnet-dev-win-x64.2.1.300-preview2-008324.zip."
System.Management.Automation.MethodInvocationException: Exception calling "Invoke" with "0" argument(s): "Failed to download https://dotnetcli.azureedge.net/dotnet/Sdk/2.1.300-preview2-008324/dotnet-dev-win-x64.2.1.300-preview2-008324.zip." ---> System.Management.Automation.RuntimeException: Failed to download https://dotnetcli.azureedge.net/dotnet/Sdk/2.1.300-preview2-008324/dotnet-dev-win-x64.2.1.300-preview2-008324.zip. ---> System.Management.Automation.RuntimeException: Failed to download https://dotnetcli.azureedge.net/dotnet/Sdk/2.1.300-preview2-008324/dotnet-dev-win-x64.2.1.300-preview2-008324.zip.
   --- End of inner exception stack trace ---
   at System.Management.Automation.ExceptionHandlingOps.CheckActionPreference(FunctionContext funcContext, Exception exception)
   at System.Management.Automation.Interpreter.ActionCallInstruction`2.Run(InterpretedFrame frame)
   at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
   at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
   at System.Management.Automation.Interpreter.Interpreter.Run(InterpretedFrame frame)
   at System.Management.Automation.Interpreter.LightLambda.RunVoid1[T0](T0 arg0)
   at System.Management.Automation.ScriptBlock.InvokeWithPipeImpl(ScriptBlockClauseToInvoke clauseToInvoke, Boolean createLocalScope, Dictionary`2 functionsToDefine, List`1 variablesToDefine, ErrorHandlingBehavior errorHandlingBehavior, Object dollarUnder, Object input, Object scriptThis, Pipe outputPipe, InvocationInfo invocationInfo, Object[] args)
   at System.Management.Automation.ScriptBlock.<>c__DisplayClass57_0.<InvokeWithPipe>b__0()
   at System.Management.Automation.Runspaces.RunspaceBase.RunActionIfNoRunningPipelinesWithThreadCheck(Action action)
   at System.Management.Automation.ScriptBlock.InvokeWithPipe(Boolean useLocalScope, ErrorHandlingBehavior errorHandlingBehavior, Object dollarUnder, Object input, Object scriptThis, Pipe outputPipe, InvocationInfo invocationInfo, Boolean propagateAllExceptionsToTop, List`1 variablesToDefine, Dictionary`2 functionsToDefine, Object[] args)
   at System.Management.Automation.ScriptBlock.DoInvoke(Object dollarUnder, Object input, Object[] args)
   at CallSite.Target(Closure , CallSite , ScriptBlock )
   --- End of inner exception stack trace ---
   at System.Management.Automation.ExceptionHandlingOps.CheckActionPreference(FunctionContext funcContext, Exception exception)
   at System.Management.Automation.Interpreter.ActionCallInstruction`2.Run(InterpretedFrame frame)
   at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
   at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
at Invoke-With-Retry, C:\roslyn\Binaries\Tools\dotnet-install.ps1: line 110
at GetHTTPResponse, C:\roslyn\Binaries\Tools\dotnet-install.ps1: line 166
at DownloadFile, C:\roslyn\Binaries\Tools\dotnet-install.ps1: line 430
at <ScriptBlock>, C:\roslyn\Binaries\Tools\dotnet-install.ps1: line 499
at <ScriptBlock>, C:\roslyn\build\scripts\build-utils.ps1: line 153
at Exec-Block, C:\roslyn\build\scripts\build-utils.ps1: line 20
at Ensure-DotnetSdk, C:\roslyn\build\scripts\build-utils.ps1: line 153
at Ensure-MSBuild, C:\roslyn\build\scripts\build-utils.ps1: line 196
at <ScriptBlock>, C:\roslyn\build\scripts\build.ps1: line 717

07.05.2018 Announcing .NET Core 2.1 RC 1
 
Announcing .NET Core 2.1 RC 1

06.05.2018 Можно убрать из панели инструментов пользовательский элемент управления
 
Я разработал свой собственный тип столбца для компонента DataGridView. Сам столбец имеет свой собственный пользовательский элемент управления. Он находится в одной библиотеки с моей версией компонента DataGridView. Там добавлено событие, которое обрабатывается ячейками этого столбца.
Когда я добавляю эту библиотеку в проект, где используется DataGridView с моим типом столбца, то вместе с расширенном типом данного компонента в панеле инструментов появляется и мой элемент управления, разработанный для этого типа столбца. Что не желательно. Возможно ли его каким-то образом оттуда убрать? И если да, то как это сделать?

01.05.2018 Не получается избежать копи-паста. Нужно что-то типа макросов
 
Здравствуйте, есть такой вопрос:

Предположим, что есть класс функций, которые представляют из себя, скажем так, обертки над другими функциями:

class ExtWebAPI
{
    public AParam GetParameter(string aSerialNumber, string aParameterName)
        {
            AParam ap = null;

            int count = 0;
            while (++count < _RetriesCount)
            {
                try
                {
                    ap = _Main.GetParameter(aSerialNumber, aParameterName);
                    break;
                }
                catch (Exception)
                {
                    ExceptionHandling();
                }
            }

            return ap;
        }


        public AResult OperationStart(string aSerialNumber, string PartNumber, string aOperationCode)
        {
            AResult ar = null;

            int count = 0;
            while (++count < _RetriesCount)
            {
                try
                {
                    ar = _Main.OperationStart(aSerialNumber, PartNumber, aOperationCode);
                    break;
                }
                catch (Exception)
                {
                    ExceptionHandling();
                }
            }

            return ar;
        }
}


То есть, некая функция Веб-Сервиса пытается выполниться, если неудачно, то происходит переключение между серверами и происходит повторение.

Вопрос такой:
У меня в проекте таких функций около 50 штук и выглядят они посложнее (тут просто упростил). Но видно, что все обертки по сути делают одно и то же — вызывают в цикле другую функцию.
Поэтому, хотелось бы как-то уменьшить объем кода.
Сюда просится какая-то функция, которая бы брала другую функцию как аргумент. Но сигнатуры у всех совершенно разные. Такой вариант не подходит.
Или какой-нибудь макрос, как в C++, но в C# их нет.
Есть ли какой-то способ?

Заранее спасибо.

25.04.2018 Ошибка 0x80131506 при отладке в VS2017. Что за хрень?
 
При попытке зайти в определенный метод из определенного места дерева вызовов вызывает странный эффект — сначала студия заходит в тело метода (причем метод неверный — показывается метод базового класса, а должен быть перегруженный в классе-потомке), потом без всяких предупреждений закрывает приложение и начинает выполнение с первой строки Main(). В логе студии пишется:

The program '[2552] ConsoleApp1.exe' has exited with code -2146233082 (0x80131506).

У кого-нибудь есть хоть малейшая идея, что это всё означает?
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>

24.04.2018 Столбец в DataGridView с разными типами ячеек
 
DataGridView имеет два столбца: наименование параметра и его значение. Редактирование пользователю данных в таблице запрещено. Но для некоторых параметров необходимо вывод уточняющей информации. Для этого хотелось бы, чтоб при выборе пользователем этих параметров появлялась в правом углу небольшая кнопка. Если уточняющей информации нет, то кнопка при выборе этого параметра не появляется.

Возможно ли такое сделать в DataGridView? Если возможно, то подскажите, в какую сторону копать. Все примеры, которые я встречал в сети в столбце ячейки одного, то есть все ячейки в столбце ведут себя так, когда их выбирают, либо появляются у них кнопка, либо нет. Это не совсем то, что мне нужно.

Привязки к базе данных нет. Приложение Net form

24.04.2018 формирование ресурсов на pre-build
 
Есть апликуха, которая должна прогонять sql-скрипты, которые хранятся в resource-файле. Есть идея, сделать финт, чтобы на pre-build event'е эти скрипты автоматом брались из специальной папочки и засовывались в ресурсы. Как такое лучше сделать? Или может подход порочный и нужно по-другому? Спасибо

19.04.2018 Чудеса method overload resolution
 
Привет всем!

Наблюдаю непонятую картину.

В библиотеке имеются такие методы:
public static IObservable<TResult> Create<TResult>(Func<IObserver<TResult>, CancellationToken, Task> subscribeAsync) {...}
public static IObservable<TResult> Create<TResult>(Func<IObserver<TResult>, CancellationToken, Task<IDisposable>> subscribeAsync) {...}
public static IObservable<TResult> Create<TResult>(Func<IObserver<TResult>, CancellationToken, Task<Action>> subscribeAsync) {...}

Пишу вот такое
var sequence =
  Observable.Create<int>( async ( observer, token ) =>
                          {
                            while ( true )
                            {
                              token.ThrowIfCancellationRequested();
                              await Task.Delay( 100, token );
                              observer.OnNext( 0 );
                            }
                          } );

И это не компилируется из-за неоднозначности:
Error    1    The call is ambiguous between the following methods or properties: 
'System.Reactive.Linq.Observable.Create<int>(System.Func<System.IObserver<int>,System.Threading.CancellationToken,System.Threading.Tasks.Task<System.Action>>)' 
and 
'System.Reactive.Linq.Observable.Create<int>(System.Func<System.IObserver<int>,System.Threading.CancellationToken,System.Threading.Tasks.Task>)'

Но если заменить цикл на такой
var sequence =
  Observable.Create<int>( async ( observer, token ) =>
                          {                            
                            while ( false ) // Это единственное отличие
                            {
                              token.ThrowIfCancellationRequested();
                              await Task.Delay( 100, token );
                              observer.OnNext( 0 );
                            }
                          } );

То все компилируется и вызов резолвится в
public static IObservable<TResult> Create<TResult>(Func<IObserver<TResult>, CancellationToken, Task> subscribeAsync) {...}

Что здесь происходит?

19.04.2018 Performance Improvements in .NET Core 2.1
 
Performance Improvements in .NET Core 2.1

private static int[] s_intArray = Enumerable.Range(0, 100_000_000).ToArray();

[Benchmark(OperationsPerInvoke = 100_000_000)]
public int EqualityComparerInt32()
{
    int[] items = s_intArray;

    for (int i = 0; i < items.Length; i++)
        if (EqualityComparer<int>.Default.Equals(items[i], -1))
            return i;

    return -1;
}


On my machine, I get output like the following, showcasing an ~2.5x speedup over .NET Core 2.0:

Method Toolchain Mean
EqualityComparerInt32 .NET Core 2.0 2.2106 ns
EqualityComparerInt32 .NET Core 2.1 0.8725 ns


18.04.2018 Графическая библиотека
 
Коллеги, посоветуйте неспециалисту.

Нужна графическая библиотека для выполнения вот какой задачи:
Есть картинка, jpeg или png
На картинке есть замкнутые регионы неправильной формы, очерченные контуром контрастного цвета.
1) Нужно уметь определять клик внутри такого региона. Нужные активные регионы задаются точкой внутри него.
2) Нужно уметь быстро залить внутренности этих замкнутых регионов нужным цветом при указании точки внутри них. Заливать на самом рисунке необязательно, можно просто получить координаты точек области заливки и закрасить эту область на экране в отдельном слое, не меняя исходную картику.
Желательно, что бы это всё можно было масштабировать.
Все действия на экране, сохранения результата не требуется.

 
 
 
 
10.12  .NET Reactor
15.11  n
15.11  C# ClickOnce