【问题标题】:Using 'Default' keyword on an instance of type 'Object' [duplicate]在“对象”类型的实例上使用“默认”关键字 [重复]
【发布时间】:2017-03-09 20:34:13
【问题描述】:

当提供一个整数(或其他值类型)作为object 装箱时,我很确定没有办法直接使用default()(返回给定类型的默认值)返回底层的盒装默认值,是否正确?

我宁愿在单个操作中调用object,而不必编写大量条件,如下所示:

public object GetDefaultVal(object obj){
 if(obj is Guid){
  return default(Guid);
 }
 if(obj is double){
  return default(double);
 }
....
}

【问题讨论】:

  • 返回默认值(typeof(obj))?
  • 很不清楚您在问什么,因为您的示例由于未提供方法名称而无法编译,并且使用Default 而不是default。
  • @Henningsson 不 typeof() 返回Type 的实例,因此它总是为空...
  • 你能把这个方法改成通用的吗?或者您是否真的需要能够传递一个装箱的整数并取而代之的是检索一个装箱的 0?
  • 这对您有帮助吗:stackoverflow.com/a/353073/580053

标签: c# default boxing unboxing


【解决方案1】:

假设你不能把方法改成泛型,你可以只使用所有值类型都提供无参数构造函数的事实,所以你可以调用Activator.CreateInstance:

public object GetDefaultValue(object obj)
{
    Type type = obj.GetType();
    return type.IsValueType ? Activator.CreateInstance(type) : null;
}

(所有引用类型的默认值为null。)

【讨论】:

    猜你喜欢
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 2011-07-28
    • 1970-01-01
    • 2018-01-02
    • 2017-07-27
    相关资源
    最近更新 更多