2013-05-30 48 views
2

我有一个对象,作为参数布尔?转换bool?到是/否/空字符串

我需要在中继器上显示它。

<%# Eval("LS_Body_Connection") %> 

我创建一个类

public static class BooleanExtensions 
{ 
    public static string ToYesNoString(this bool value) 
    { 
     return value ? Resources.Yes : Resources.No; 
    } 
} 

如何中继器上使用吗?

我尝试

((bool)Eval("LS_Body_Connection")).ToYesNoString() 

,但它不是recognaize

“布尔”不包含“ToYesNoString”,没有扩展方法的定义“ToYesNoString”接受“BOOL”类型的第一个参数可能发现在页面的CS(是否缺少using指令或程序集引用?)

我可以调用扩展方法

当我添加

<%@ Import Namespace="IDD.App_Code" %> 

我得到 的调用以下方法或属性之间暧昧:“IDD.App_Code.BooleanExtensions.ToYesNoString(?布尔)”和“IDD.App_Code.BooleanExtensions.ToYesNoString(布尔? )”

+0

为什么不让你的扩展方法使用'bool?' – juharr

回答

4

尝试((bool)Eval("LS_Body_Connection")).ToYesNoString()

而且你需要导入像下面的命名空间克劳迪奥的回答

<%@ Import Namespace="My.Namespace.Containing.MyExtensions.Class" %> 
3

尝试增加inporting的命名空间,其中扩展方法放置

<%@ Import Namespace="YourNameSpace" %> 

您还需要转换Eval返回值bool作为@Damith解释。

+0

1+需要导入命名空间 – Damith

1

首先,你需要一个版本的ToYesNoString接受一个bool?,而不仅仅是bool,参数。

public static string ToYesNoString(this bool? value) 
{ 
    return value.HasValue ? ToYesNoString(value.Value) : null; 
} 

然后在你的中继器,你应该可以的Eval结果转换为bool?

(bool?)Eval("LS_Body_Connection") 

,然后或者呼叫分机反对

((bool?)Eval("LS_Body_Connection")).ToYesNoString() 

,或者,如果不起作用,请明确调用方法

BooleanExtensions.ToYesNoString((bool?)Eval("LS_Body_Connection"))