这是主要课程:
public class ReportsParameter
{
public ReportsParameter(string p, decimal? nullable);
public ReportsParameter(string ParameterName, string Value);
public string parameterName { get; set; }
public string value { get; set; }
}
在我使用的另一个课程中:
reportsParameters1.Add(new ReportsParameter("Title", txtTitle.Text));
reportsParameters.Add(new ReportsParameter("IsCurrency", null));
reportsParameters.Add(new ReportsParameter("IsInactive", null));
当我构建项目时,我收到以下错误:
以下方法或属性之间的调用不明确: 'General.ReportsParameter.ReportsParameter(string,string)'和 'General.ReportsParameter.ReportsParameter(string,decimal?)'
包含IsCurrency
和IsInactive
的两行发生错误。
我可以使用DBNULL.Value.Tostring()
吗?或者null与dbnull不同?
答案 0 :(得分:7)
这是因为有一个可以为空的decimal?
和string
也是可以为空的。
尝试这样做..以指示编译器调用适当的重载。
reportsParameters.Add(new ReportsParameter("IsCurrency", (string)null));
OR
reportsParameters.Add(new ReportsParameter("IsInactive", (decimal?)null));
酌情
答案 1 :(得分:0)
要添加到@ bit的答案,您可以将ReportsParameter
类设为通用,具体取决于您之后使用它的方式。您可以获得不会丢失原始参数类型的好处,这意味着您可以获得更强的类型安全性。如果未指定null
参数,您还可以为value
参数提供默认public class ReportsParameter<T>
{
public ReportsParameter(string name, T value = default(T))
{
_name = name; _value = value;
}
private readonly string _name;
public string Name
{ get { return _name; } }
private readonly T _value;
public T Value
{ get { return _value; } }
}
值:
// no need to pass the second parameter if it's null
list.Add(new ReportsParameter<string>("IsCurrency"));
list.Add(new ReportsParameter<double?>("IsInactive"));
然后在实例化时传递泛型参数:
public static class Reports
{
public ReportsParameter<T> CreateParameter<T>
(string name, T value = default(T))
{
return new ReportsParameter<T>(name, value);
}
}
一个缺点是,要从编译器获取类型推断,您还需要一个工厂方法,如:
// no need to specify <string> in this case
reportsParameters1.Add(Reports.CreateParameter("Title", txtTitle.Text));
// but you need to do it here to resolve ambiguity
// (no need to pass the default value, however)
reportsParameters.Add(Reports.CreateParameter<string>("IsCurrency"));
reportsParameters.Add(Reports.CreateParameter<decimal?>("IsInactive"));
允许您在推断出类型时跳过显式泛型参数:
{{1}}