小编Mic*_*ski的帖子

为什么没有Nullable <T> .Equals(T值)方法?

让我们从一段非常简单的代码开始:

decimal d = 2;

Console.WriteLine("d == 2 = {0}", d == 2);
Console.WriteLine("d == (decimal)2 = {0}", d == (decimal)2);
Console.WriteLine("d.Equals(2) = {0}", d.Equals(2));
Console.WriteLine("d.Equals((decimal)2) = {0}", d.Equals((decimal)2));
Run Code Online (Sandbox Code Playgroud)

结果是4xtrue.现在,让我们将变量d的类型更改为十进制?:

decimal? d = 2;
Run Code Online (Sandbox Code Playgroud)

这次结果将是True,True,False,True.对这种情况的解释非常简单.对于Nullable <T>类型,Equals方法实现如下:

public override bool Equals(object other)
{
    if (!this.HasValue)
    {
        return (other == null);
    }
    if (other == null)
    {
        return false;
    }
    return this.value.Equals(other);
}
Run Code Online (Sandbox Code Playgroud)

如果有一个值而其他参数不为null,则将调用Decimal.Equals(对象值).Decimal.Equals(object value) …

.net c# nullable

8
推荐指数
1
解决办法
837
查看次数

如何使用LINQ(或其他)将List <T1>映射到List <T2>

最近我参与了一些涉及跨各种数据域翻译对象的程序.所以我有很多映射方法(有时作为扩展方法),用于将一种类型的对象转换为另一种域中的另一种相似类型.通常,我还需要一种方法将List <>转换为所述类型的List <>.这总是涉及一个简单地创建目标类型的List <>的方法,运行foreach循环来添加源List <>的每个元素(但是在每个元素上使用映射方法)并返回新列表.它的感觉非常重复,并且可能会在语言中内置一些内容(也许在LINQ中?).我已经看了几个涉及List.ForEach()的类似问题及其优缺点(不是我正在寻找的).我将用下面的一些示例代码进行说明.也许没有办法做我想要的,如果这就是答案,那就是答案,但我希望也许有.请注意,这显然只是示例代码,关于我的整体程序设计的评论不会真正添加任何东西,因为这是一个非常小的虚拟版本的问题.

class A
{
    public Guid Id { get; set; }
    public string Email { get; set; }
    public string MemberCode { get; set; }
}

class B
{
    public string Email { get; set; }
    public string MemberCode { get; set; }

    // My custom mapping method
    public A MapToA()
    {
        return new A()
        {
            Id = Guid.NewGuid(),
            Email = this.Email,
            MemberCode = this.MemberCode
        };
    }

    // For list mapping, I have this, but I'd …
Run Code Online (Sandbox Code Playgroud)

c# linq extension-methods list

-1
推荐指数
1
解决办法
168
查看次数

标签 统计

c# ×2

.net ×1

extension-methods ×1

linq ×1

list ×1

nullable ×1