本文介绍了使用“可选,DefaultParameterValue"属性,还是没有?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用OptionalDefaultParameterValue属性与不使用它们之间有什么区别吗?

Is there any difference between using Optional and DefaultParameterValue attributes and not using them?

public void Test1([Optional, DefaultParameterValue("param1")] string p1, [Optional, DefaultParameterValue("param2")] string p2)
{
}

public void Test2(string p1= "param1", string p2= "param2")
{
}

两项工作:

Test1(p2: "aaa");
Test2(p2: "aaa");

推荐答案

不同之处在于,通过显式使用属性,编译器不会对类型要求实施相同的严格要求.

The difference is that by using the attributes explicitly, the compiler doesn't enforce the same strictness on type requirements.

public class C {
  // accepted
  public void f([Optional, DefaultParameterValue(1)] object i) { }

  // error CS1763: 'i' is of type 'object'. A default parameter value of a reference type other than string can only be initialized with null
  //public void g(object i = 1) { }

  // works, calls f(1)
  public void h() { f(); }
}

请注意,即使使用DefaultParameterValue,您也不会丢掉类型安全性:如果类型不兼容,则仍会标记该类型.

Note that even with DefaultParameterValue, you don't throw out type-safety: if the types are incompatible, this will still be flagged.

public class C {
  // error CS1908: The type of the argument to the DefaultParameterValue attribute must match the parameter type
  //public void f([Optional, DefaultParameterValue("abc")] int i) { }
}

这篇关于使用“可选,DefaultParameterValue"属性,还是没有?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-14 18:21