【问题标题】:C# -Implicit constructor from dynamic objectC# - 来自动态对象的隐式构造函数
【发布时间】:2015-08-07 10:12:30
【问题描述】:

鉴于以下class

public class DataPair{
    public string Key { get; set; }
    public object Value { get; set; }

    public DataPair(string key, object value)
    {
        Key = key;
        Value = value;
    }
}

有没有机会实现类似的东西

public static implicit operator DataPair(dynamic value)
{
    return new DataPair(value.Key, value.Value);
}

所以我可以这样创建一个新实例

DataPair myInstance = {"key", "value"};

【问题讨论】:

  • 如果存在的话,你为什么不使用调用默认构造函数的对象初始化?
  • @XaweryWiśniowiecki:你能解释一下我将如何准确地调用对象初始化吗?
  • 我认为文档中的这个示例将简单地阐明它:) msdn.microsoft.com/en-us/library/bb397680.aspx
  • @XaweryWiśniowiecki:好的。作为一个懒惰的开发者,我认为会有一些“速记”的方式来写new DataPair{Key = "key", Value = "value"}。例如。一个方法void Create(params DataPair[] values) 被称为Create({"key1", "value1"},{"key2", "value2"})
  • 我也是懒开发者,觉得new DataPair{Key = "key", Value = "value"}很短。如果你想要更短,你可以创建带有 2 个参数的构造函数。对象初始化器还允许您以{{Key = "key", Value = "value"}{Key = "key", Value = "value"}{Key = "key", Value = "value"}} 的方式将对象分配给List<>

标签: c# dynamic constructor implicit-conversion


【解决方案1】:

最后,在 C# 7 中,你可以像使用 ValueTuples 一样

public static implicit operator DataPair((string key, object value) value)
{
    return new DataPair(value.key, value.value);
}

并像使用它

DataPair dp = ("key", 234);

【讨论】:

    【解决方案2】:

    这可能是您最接近的:

    public static implicit operator DataPair(string[] values)
    {
        return new DataPair(values[0], values[1]);
    }
    

    并像这样使用它:

    DataPair myInstance = new []{"gr", "value"};
    

    这是您将获得的最接近的值,因为 = {"gr", "value"}; 语法是为数组保留的,您不能对其进行子类化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-06
      • 2020-09-07
      • 1970-01-01
      • 2011-02-20
      • 2010-12-21
      • 1970-01-01
      • 1970-01-01
      • 2018-11-26
      相关资源
      最近更新 更多