小编Mik*_*Two的帖子

Async Task.WhenAll with timeout

在新的异步dotnet 4.5库中是否有办法在Task.WhenAll方法上设置超时.我想获取几个源并在说5秒后停止并跳过未完成的源.

.net c# async-await async-ctp

56
推荐指数
3
解决办法
2万
查看次数

yield break是否等同于从返回IEnumerable <T>的方法返回Enumerable <T> .Empty

这两种方法似乎对我来说都是一样的

public IEnumerable<string> GetNothing()
{
    return Enumerable.Empty<string>();
}

public IEnumerable<string> GetLessThanNothing()
{
    yield break;
}
Run Code Online (Sandbox Code Playgroud)

我在测试场景中分析了每一个,我没有看到速度上有意义的差异,但yield break版本稍微快一些.

是否有任何理由使用一个而不是另一个?一个比另一个更容易阅读吗?是否存在对呼叫者有影响的行为差异?

c#

39
推荐指数
4
解决办法
1万
查看次数

当T为什么时,为什么Nullable <T>不是有效的自定义属性参数?

如果我有这样的枚举

public enum Hungry
{
    Somewhat,
    Very,
    CouldEatMySocks
}
Run Code Online (Sandbox Code Playgroud)

和这样的自定义属性

public class HungerAttribute : Attribute
{
    public Hungry HungerLevel { get; set; }
    public Hungry? NullableHungerLevel { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我可以做这个

[Hunger(HungerLevel = Hungry.CouldEatMySocks)]
public class Thing1
Run Code Online (Sandbox Code Playgroud)

但我不能这样做

[Hunger(NullableHungerLevel = Hungry.CouldEatMySocks)]
public class Thing2
Run Code Online (Sandbox Code Playgroud)

它会生成一个错误,指出"'NullableHungerLevel'不是有效的命名属性参数,因为它不是有效的属性参数类型".

为什么不允许这样做?据我所知,从根本上说它不在可接受的类型列表中.有效类型似乎是基元,枚举,字符串,类型和前面类型的一维数组.

这只是一个旧规则,当Nullable出现时没有得到更新?

c# attributes nullable

25
推荐指数
3
解决办法
8173
查看次数

C# - 将TextBox绑定到整数

如何将TextBox绑定到整数?例如,将单位绑定到textBox1.

public partial class Form1 : Form
{
    int unit;

    public Form1()
    {
        InitializeComponent();


    }

    private void Form1_Load(object sender, EventArgs e)
    {
        textBox1.DataBindings.Add("Text", unit, "???");
    }
Run Code Online (Sandbox Code Playgroud)

c# data-binding winforms

16
推荐指数
2
解决办法
3万
查看次数

Java中的代码覆盖工具

Java中是否有任何此类代码覆盖工具可以为程序提供不同的路径.基本上,这个想法是确保在执行期间覆盖所有循环和嵌套循环.这是为了能够确定代码库中的所有循环是否至少通过一次迭代执行.

java code-coverage

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

这是预期的C#4.0元组相等行为吗?

我在两个.NET 4.0的新Tuple <>实例之间使用.Equals和==之间看到了不同的行为.如果我在元组<>中的对象上重写了Equals并在元组上调用.Equals,则将调用Equals的覆盖.如果我在元组上使用==,则不会调用Equals的覆盖.这是设计,是否有意义?

编辑:从答案和评论,我可以告诉我,我不清楚.我知道Tuple <>是一个引用类型,对于引用类型==将检查标识(ReferenceEquals).但是,如果Tuple <>覆盖==来检查它包含的对象是否相等?为了保持一致,可能不是.

例如,如果我有一个简单的对象

public class NameAndNumber
{
    public int Number { get; set; }
    public string Name { get; set; }

    public override bool Equals(object obj)
    {
        if (obj is NameAndNumber)
        {
            NameAndNumber other = (NameAndNumber)obj;
            return Number == other.Number && Name == other.Name;
        }

        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我做这样的事情:

Tuple<NameAndNumber, NameAndNumber> left = new Tuple<NameAndNumber, NameAndNumber>(
      new NameAndNumber { Name = "one", Number = 1 }, 
      new NameAndNumber { Name = "two", Number = …
Run Code Online (Sandbox Code Playgroud)

tuples .net-4.0 c#-4.0

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

将system.data.linq.binary转换为byte []

我将字节存储在数据库表中.当我用Linq 2 sql检索它时,我得到了返回类型system.data.linq.Binary.

我无法转换system.data.linq.binary为字节数组(byte[]).

我该如何转换它?

///my datacontext

var db = new db();

//key is an value from user

var img = from i in db.images
          where i.id == key
          select i.data; 
Run Code Online (Sandbox Code Playgroud)

i.datalinq.binary我希望它是byte[].

我试过(byte[])img但它没有用.

linq linq-to-sql

14
推荐指数
3
解决办法
2万
查看次数

动态删除属性的C#属性

我有一组具有一组属性的类如下所示.

class ContactInfo
{
    [ReadOnly(true)]
    [Category("Contact Info")]
    public string Mobile { get; set; }

    [Category("Contact Info")]
    public string Name{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)

此类的对象被分配给属性网格,以便用户可以更新现有联系人.你可以看到Mobile被标记为ReadOnly.

但是,当我想添加一个全新的联系人时,我希望用户能够编辑联系人移动设备.为此,我需要在将对象分配给属性网格之前从Type中动态删除Readonly属性.可能吗?

.net c# propertygrid

10
推荐指数
1
解决办法
5万
查看次数

反序列化包含List <T>的类:为什么List最初用Null填充?

我有一个类Bar包含一个List<Foo>,既FooBar实施了ISerializable.

反序列化a时Bar,List<Foo>最初填充(正确数量)nulls; 然后在退出Bar反序列化时,Foo调用每个反序列化的ctor,填充List<Foo>(正确反序列化)Foos.

为什么会这样?我无法在测试项目中复制它:无论我尝试过什么导致Foo反序列化的ctors 在ctor 之前被调用Bar.这实际上是我想要的行为,因为我需要填充列表以便为反序列化做一些初始化Bar!

任何人都知道什么可能导致Foos被反序列化这么晚?谢谢!

c# serialization list

9
推荐指数
1
解决办法
980
查看次数

C#Lambda表达速度

之前我没有使用过很多lambda表达式,我遇到了一个案例,我认为我可以使用一个.我有一个约19,000条记录的自定义列表,我需要查看列表中是否存在记录,因此不是编写一堆循环或使用linq来查看列表,我决定尝试这样做:

for (int i = MinX; i <= MaxX; ++i)
{
    tempY = MinY;

    while (tempY <= MaxY)
    {
        bool exists = myList.Exists(item => item.XCoord == i && item.YCoord == tempY);

        ++tempY;
    }
}
Run Code Online (Sandbox Code Playgroud)

唯一的问题是执行需要大约9到11秒.我做错了什么,这只是我不应该使用这样的表达式的情况?

谢谢.

编辑:抱歉.我应该详细说明.我正在创建一个带有for和while循环的记录列表,并检查myList中是否存在该记录.这是我能想到的唯一方法.我会重新评估它,看看我带来了什么.

c# lambda

8
推荐指数
3
解决办法
1955
查看次数