小编Jer*_*vel的帖子

为什么ReSharper告诉我这个表达总是如此?

我有以下代码,它将告诉我代码中的其他地方是否使用了某个属性.这背后的想法是验证具有privatesetter 的属性是否可以只读.

这里有多个陷阱,但主要的是在构造函数之外对属性的赋值意味着它不会触发.此外,静态属性可能只在静态构造函数中具有赋值以触发诊断.同样,实例属性只需要一个实例构造函数.

现在,到目前为止我已经考虑了大多数场景,但ReSharper在这段代码中给了我一个警告,我似乎无法弄清楚它的逻辑.以上规范在这段代码中翻译:

var isStaticProperty = propertySymbol.IsStatic;
bool hasInstanceUsage = false;
bool hasStaticUsage = false;

foreach (var identifier in outerClass.DescendantNodes().OfType<IdentifierNameSyntax>())
{
   var memberSymbol = context.SemanticModel.GetSymbolInfo(identifier);
   if (memberSymbol.Symbol.Equals(propertySymbol))
   {
       var constructor = identifier.Ancestors().OfType<ConstructorDeclarationSyntax>()
                                               .FirstOrDefault();
       var isInConstructor = constructor != null;
       var isAssignmentExpression = identifier.Ancestors()
                                               .OfType<AssignmentExpressionSyntax>()
                                               .FirstOrDefault() != null;

       // Skip anything that isn't a setter
       if (!isAssignmentExpression)
       {
           continue;
       }

       // if it is a setter but outside the constructor, we don't report any diagnostic
       if (!isInConstructor)
       { …
Run Code Online (Sandbox Code Playgroud)

c# resharper boolean-logic roslyn

20
推荐指数
3
解决办法
5439
查看次数

为什么IndexOf不能在匈牙利文化中找到与Y结合的角色N?

IndexOf调用字符串的函数返回-1,但肯定有匹配.

string sUpperName = "PROGRAMOZÁSI NYELVEK II. ADA EA+GY. (BSC 08 A)";
string sUpperSearchValue = "N";

sUpperName.IndexOf(sUpperSearchValue); // Returns -1

sUpperSearchValue = "NY";
sUpperName.IndexOf(sUpperSearchValue); // Returns 13

sUpperName[13]; // 78 'N'
sUpperSearchValue[0]; // 78 'N'
sUpperName[13] == sUpperSearchValue[0]; // true
Run Code Online (Sandbox Code Playgroud)

你有什么想法,为什么它发现"NY"但不是"N"它自己?如果我在字符串中搜索其他所有字母,它就能找到它,但不能找到它"N".小写也会出现同样的问题.

如果我也" N"没有输入任何匹配," NY"就可以了.

在控制台中的图片 这里

c# indexof

19
推荐指数
1
解决办法
508
查看次数

如何确保数据流块仅按需创建线程?

我使用TPL Dataflow API编写了一个小管道,它从多个线程接收数据并对它们执行处理.

设置1

当我为每个块配置它使用MaxDegreeOfParallelism = Environment.ProcessorCount(8在我的情况下)时,我注意到它填充多个线程中的缓冲区并且处理第二个块不会开始直到所有线程都收到+ - 1700个元素.你可以在这里看到这个.

设置2

当我设置MaxDegreeOfParallelism = 1然后我注意到在一个线程上接收所有元素并且在接收到+40个元素之后处理发送已经开始.数据在这里.

设置3

当我设置MaxDegreeOfParallelism = 1并在发送每个输入之前引入1000ms的延迟时,我注意到元素在收到后立即发送,并且每个接收的元素都放在一个单独的线程上.数据在这里.


到目前为止的设置.我的问题如下:

  1. 当我比较设置1和2时,我注意到与并行相比,在串行完成时处理元素的启动速度要快得多(即使考虑到并行具有8倍的线程数).是什么导致这种差异?

  2. 由于这将在ASP.NET环境中运行,因此我不想生成不必要的线程,因为它们都来自单个线程池.如设置3所示,即使只有少量数据,它仍会在多个线程上传播.这也是令人惊讶的,因为从设置1我会假设数据在线程上顺序传播(注意前50个元素都是如何进入线程16).我可以确保它只按需创建新线程吗?

  3. 还有另一个概念称为BufferBlock<T>.如果TransformBlock<T>已经排队输入,那么在我的管道(ReceiveElement)中交换第一步的实际区别是BufferBlock什么?


class Program
{
    static void Main(string[] args)
    {
        var dataflowProcessor = new DataflowProcessor<string>();
        var amountOfTasks = 5;
        var tasks = new Task[amountOfTasks];

        for (var i = 0; i < amountOfTasks; i++)
        {
            tasks[i] = SpawnThread(dataflowProcessor, $"Task {i …
Run Code Online (Sandbox Code Playgroud)

c# multithreading asynchronous async-await tpl-dataflow

19
推荐指数
1
解决办法
2648
查看次数

WinRT/Metro应用程序的本地数据库存储

我试图在WinRT中找到一个API,它允许我创建一个本地数据库,可用于存储偶尔连接的应用程序的数据.我正在寻找像SQL Compact Edition这样的东西.

我在各种电路板上看到了各种消息,表明存在这些消息

  • (a)不会是本地数据库
  • (b)没有本地"服务器"数据库(即SQL Express类型实例)
  • (c)名为"Jet Blue"的本地数据库代码.

有没有人对此有明确的答案?如果它被封锁,我不想开始这条路.

database local-storage microsoft-metro windows-runtime windows-store-apps

18
推荐指数
2
解决办法
1万
查看次数

如何将null设置为GUID属性

我有一个Employee类型的对象,它有一个Guid属性.我知道如果我想设置为null我必须将我的type属性定义为可空的Nullable<Guid>prop或Guid?支柱.

但在我的情况下,我无法改变道具的类型,所以它将保持为Guid类型和我的同事,我们不想使用Guid.Empty.

有没有办法将我的属性设置为null或string.empty,以便将数据库中的字段重新设置为null.

我有一个从string.empty转换为null的机制,但如果将更改为接受空guid为null,我将更改许多内容.

请帮忙!

c# guid nullable

17
推荐指数
5
解决办法
8万
查看次数

为什么带签名(primitive,wrapper)和(primitive,primitive)的两个方法会导致方法调用(包装器,原语)不明确?

这只是一个练习,但我无法弄清楚这种模糊性:

private static void flipFlop(String str, int i, Integer iRef) {
System.out.println(str + "ciao");
}

private static void flipFlop(String str, int i, int j) {
System.out.println(str + "hello");
}

public static void main(String[] args) {
flipFlop("hello", new Integer(4), 2004);
}
Run Code Online (Sandbox Code Playgroud)

它说:

对于类型Test,方法flipFlop(String,int,Integer)是不明确的

我猜想第二个参数将被解包为int,所以第二个flipFlop方法就是选择.

java jdk1.6

17
推荐指数
2
解决办法
1060
查看次数

为什么我不能从扩展类型的基类调用扩展方法?

我正在尝试List<KeyValuePair<string,int>>通过覆盖索引器来添加查找元素的功能.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    public class MyList : List<KeyValuePair<string, int>>
    {
        public int this[string key]
        {
            get
            {
                return base.Single(item => item.Key == key).Value;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,编译器抛出此错误:

' System.Collections.Generic.List<System.Collections.Generic.KeyValuePair<string,int>>'不包含' Single' 的定义.

虽然List<T>没有那个方法,但它应该是可见的,因为它是来自System.Linq命名空间的扩展方法(包括在内).显然使用this.Single解决问题,但为什么通过base错误访问?

C#规范第7.6.8节说

base.I发生在类或结构中时,I必须表示该类或结构的基类的成员.

这似乎阻止了对扩展方法的访问base.不过它也说

在绑定时,表单的基本访问表达式base.Ibase[E]它们的编写方式完全相同,((B)this).I并且((B)this)[E]在哪里B是构造发生的类或结构的基类.因此,base.Ibase[E]对应于 …

c# linq inheritance extension-methods

17
推荐指数
1
解决办法
5723
查看次数

"无法启动Omnisharp,因为Mono版本> = 3.10.0是必需的"

我刚刚安装了Visual Studio Code,当我启动它时,它给了我这个错误.当我尝试执行我的示例应用程序时,它给了我TypeLoadExceptions.

无法启动Omnisharp,因为需要Mono版本> = 3.10.0

.net linux mono visual-studio-code

16
推荐指数
1
解决办法
3315
查看次数

是否可以定义实现多个接口的任何类型的列表?

考虑以下类层次结构:

public interface X { void Foo(); }

public interface Y { void Bar(); }

public class A : X, Y
{
    public void Foo() {}
    public void Bar() {}
}

public class B : X, Y
{
    public void Foo() {}
    public void Bar() {}
}
Run Code Online (Sandbox Code Playgroud)

有没有什么方法可以定义一个列表(或任何通用类型),它可以包含A's和B's',同时允许我将所述列表的内容视为两者XY?也就是说,这将允许我写下这样的内容:

var list = ???
list.Add(new A());
list.Add(new B());
list.First().Foo();
list.Last().Bar();
Run Code Online (Sandbox Code Playgroud)

编辑

只是为了澄清,我目前正在处理的类型是ObservableCollection<T>(A)和ReadOnlyObservableCollection<T>(B),我感兴趣的接口是IList<T>(X)和 …

c# generics

15
推荐指数
2
解决办法
2052
查看次数

在PowerShell中创建Web场

我正在尝试在PowerShell中自动创建服务器场.通过手动创建,我得到了以下XML:

<webFarms>
    <webFarm name="alwaysup" enabled="true">
        <server address="alwaysup-blue" enabled="true">
            <applicationRequestRouting httpPort="8001" />
        </server>
        <server address="alwaysup-green" enabled="true">
            <applicationRequestRouting httpPort="8002" />
        </server>
        <applicationRequestRouting>
            <healthCheck url="http://alwaysup/up.html" interval="00:00:05" responseMatch="up" />
        </applicationRequestRouting>
    </webFarm>
    <applicationRequestRouting>
        <hostAffinityProviderList>
            <add name="Microsoft.Web.Arr.HostNameRoundRobin" />
        </hostAffinityProviderList>
    </applicationRequestRouting>
</webFarms>
Run Code Online (Sandbox Code Playgroud)

试图通过PS来做到这一点证明是麻烦的:据我所知,没有专门的API来实现这一点(WebFarmSnapin用于旧版本).

我已将注意力转移到IIS管理Cmdlet,但只有一半工作.

我的代码:

#####
# Overwriting the server farm
#####

Write-Host "Overwriting the server farm $($webFarmName)"

$webFarm = @{};
$webFarm["name"] = 'siteFarm'

Set-WebConfiguration "/webFarms" -Value $webFarm

#####
# Adding the servers
#####

Write-Host "Adding the servers"

$blueServer = @{}
$blueServer["address"] = …
Run Code Online (Sandbox Code Playgroud)

iis powershell load-balancing arr

15
推荐指数
1
解决办法
1306
查看次数