小编Ham*_*jam的帖子

Contravariance和Entity Framework 4.0:如何将EntityCollection指定为IEnumerable?

我已经指定了几个接口,我使用Entity Framework 4实现了实体.我能想到的最简单的演示代码是:

public class ConcreteContainer : IContainer
{
    public EntityCollection<ConcreteChild> Children { get; set; }           
}
public class ConcreteChild : IChild
{
}
public interface IContainer
{
    IEnumerable<IChild> Children { get; set; }
}
public interface IChild
{        
}
Run Code Online (Sandbox Code Playgroud)

我从上面收到以下编译器错误:

'Demo.ConcreteContainer'没有实现接口成员'Demo.IContainer.Children'.'Demo.ConcreteContainer.Children'无法实现'Demo.IContainer.Children',因为它没有匹配的返回类型'System.Collections.Generic.IEnumerable'

我目前的理解是,这是因为IEnumerable(由EntityCollection实现)是协变的,但可能不是逆变的:

此类型参数是协变的.也就是说,您可以使用指定的类型或更多派生的类型.有关协方差和逆变的更多信息,请参阅泛型中的协方差和逆变.

我是否正确,如果是这样,有什么方法可以实现我的目标,IContainer纯粹根据其他接口而不是使用具体类来指定接口?

或者,我是否误解了一些更基本的东西?

c# covariance

6
推荐指数
1
解决办法
1072
查看次数

使用NodaTime计算包容性天数

例如,如果我有以下代码:

var nodaStart = new LocalDate(2012, 5, 1);
var nodaEnd = new LocalDate(2012,5,2);
var daysBetween = Period.Between(nodaStart, nodaEnd,PeriodUnits.Day);
Run Code Online (Sandbox Code Playgroud)

然后 daysBetween.Days == 1

但是,我计算的范围需要计算为2天.即它需要包括开始和结束日期.

实际的方法可以采取开始和结束日期(相隔不超过一年),并需要计算天数.如果超过31天,则剩余的数量将返回整周.

我有那种逻辑工作正常,但因为计数是独家我有一天出去了.

我想我可以startDate.addDays(-1)在创建nodaStart它之前做,但我想知道是否有更优雅/漂亮的方式让noda返回Period.

谢谢


更新:我已经阅读了类的源代码,Period并且+运算符被重载,所以我可以添加

daysBetween += Period.FromDays(1);
Run Code Online (Sandbox Code Playgroud)

c# datetime nodatime

6
推荐指数
1
解决办法
1560
查看次数

创建异步包装器的方法

如何为同步方法创建异步包装器更好?

// sync method
public void LongOperation()
{
    //code...
}


// versions of wrapper
public async Task LongOpertionWrapperAsyncV1()
{
    var task = Task.Factory.StartNew(LongOperation);
    await task.ConfigureAwait(false);
}

public Task LongOpertionWrapperAsyncV2()
{
    var task = Task.Factory.StartNew(LongOperation);
    task.ConfigureAwait(false);
    return task;
}
Run Code Online (Sandbox Code Playgroud)

虽然两个版本的使用没有区别.

async Task Executor()
{
    await LongOpertionWrapperAsyncV1();
    await LongOpertionWrapperAsyncV2();
}
Run Code Online (Sandbox Code Playgroud)

对于返回值的方法(Task <T>),我使用第一个版本.

但我想知道你的意见.

这些版本之间存在一般差异吗?

.net c# async-await c#-5.0

6
推荐指数
2
解决办法
6812
查看次数

在列表中查找具有最低属性值的项目

假设我有这个课程:

class Person {
   public int ID;
   public string Name;
}
Run Code Online (Sandbox Code Playgroud)

然后我有一份人员名单.

List<Person> persons = new List<Person>();
Run Code Online (Sandbox Code Playgroud)

其中充斥着很多随机的人.如何查询列表以获取ID最低的人?列表中的对象是随机顺序,因此ID最低的人可能不是第一个元素.我可以在不先排序列表的情况下实现此目的吗

.net c# list

6
推荐指数
3
解决办法
2447
查看次数

从List中获取5个字符串组

我有一个List<string>,我想从中获取5个项目组.没有键或任何简单的分组......但它总是5的倍数.

例如

{"A","16","49","FRED","AD","17","17","17","FRED","8","B","22","22","107","64"}
Run Code Online (Sandbox Code Playgroud)

参加团队:

"A","16","49","FRED","AD"
"17","17","17","FRED","8"
"B","22","22","107","64"
Run Code Online (Sandbox Code Playgroud)

但我无法找到一个简单的方法来做到这一点!

很确定它可以用枚举和Take(5)来完成......

.net c# linq

6
推荐指数
2
解决办法
995
查看次数

根据属性名称数组创建对象的子集

我有一个类和一组属性名称定义如下:

public class Dog {
    public string Name { get; set; }
    public string Breed { get; set; }
    public int Age { get; set; }
}

var desiredProperties = new [] {"Name", "Breed"};
Run Code Online (Sandbox Code Playgroud)

我还有一个返回dog对象列表的方法:

List<Dog> dogs = GetAllDogs();
Run Code Online (Sandbox Code Playgroud)

有没有办法可以返回dogs只包含desiredProperties数组中定义的属性的子集?最终,此结果列表将序列化为JSON.

考虑到允许用户指定任何属性组合(假设它们都是有效的)作为数组中的输出,我一直在努力解决这个问题.更多例子:

var desiredProperties = new [] {"Name", "Age"};
// Sample output, when serialized to JSON:
// [
//   { Name: "Max", Age: 5 },
//   { Name: "Spot", Age: 2 }
// ]

var desiredProperties = …
Run Code Online (Sandbox Code Playgroud)

.net c# linq reflection

6
推荐指数
1
解决办法
1080
查看次数

在某些特定情况下,用作控制流机制的异常是否有效?

我正在调整实现中的一些代码RationalNumber.特别是在平等逻辑中,我正在考虑以下内容:

public bool Equals(RationalNumber other)
{
   if (RationalNumber.IsInfinity(this) ||
       RationalNumber.IsInfinity(other) ||
       RationalNumber.IsNaN(this) ||
       RationalNumber.IsNaN(other))
   {
       return false;
   }

   try
   {
       checked
       {
           return this.numerator * other.Denominator == this.Denominator * other.numerator;
       }
   }
   catch (OverflowException)
   {
       var thisReduced = RationalNumber.GetReducedForm(this);
       var otherReduced = RationalNumber.GetReducedForm(other);
       return (thisReduced.numerator == otherReduced.numerator) && (thisReduced.Denominator == otherReduced.Denominator);
   }
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我正在使用异常作为流量控制机制.这背后的原因是我不想在每次平等检查中评估两个分数的最大公约数的惩罚.因此,我只决定在最不可能的情况下这样做:一个或两个交叉产品溢出.

这是可接受的做法吗?我总是读到异常永远不应该被用作代码的流机制,但我真的没有看到另一种方法来实现我想要的东西.

欢迎任何替代方法.

.net c# exception-handling

6
推荐指数
1
解决办法
83
查看次数

如何强制Visual Studio在https中运行网站

我的很多网站都需要,https但是当我从Visual Studio启动我的ASP.NET MVC网站时,它会加载http.

当我导航到需要的页面时https,在具有该[RequireHttps]属性的控制器上,它不知道https该站点的版本在端口44300上运行,因此它只是尝试重定向到https:// localhost/login(默认端口) ).

我错过了某种配置吗?我有SSL Enabled = trueMVC项目的属性.

我希望能像我通常那样在我的服务器上托管我的网站

这可能吗?

.net c# asp.net asp.net-mvc https

6
推荐指数
1
解决办法
1679
查看次数

两个类有共同的方法和属性

我有两节课.

A类:

class A() {
    public void QQ() {}
    public void WW() {}
}
Run Code Online (Sandbox Code Playgroud)

和B类:

class B() {
    public void QQ() {}
    public void WW() {}
}
Run Code Online (Sandbox Code Playgroud)

它们不共享相同的接口或抽象类.A和B有两个截然不同的层次,我现在无法改变它.

我想写一个适用于A和B并使用QQ和WW方法的程序.

我能这样做吗?你能建议我可以学习的任何文件吗?

坦克

.net c# duck-typing class dynamic

6
推荐指数
1
解决办法
184
查看次数

按名称获取字段

我正在尝试创建一个可以从其对象返回字段的函数.

这是我到目前为止所拥有的.

public class Base
{
    public string thing = "Thing";
    public T GetAttribute<T>(string _name)
    {
        return (T)typeof(T).GetProperty(_name).GetValue(this, null);
    }
}
Run Code Online (Sandbox Code Playgroud)

我理想的是打电话:

string thingy = GetAttribute<string>("thing");
Run Code Online (Sandbox Code Playgroud)

但是我有一种感觉,当我阅读这篇文章时我得到了错误的结论,因为我一直得到空引用异常.

.net c# reflection

6
推荐指数
2
解决办法
4632
查看次数