转换bool? to Yes / No / null string

时间:2013-05-30 11:55:51

标签: c# asp.net

我有一个对象作为参数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()

但它不能重新认识

'bool'不包含'ToYesNoString'的定义,并且没有扩展方法'ToYesNoString'可以找到接受类型'bool'的第一个参数(你是否缺少using指令或汇编引用?)

在页面的cs中我可以调用扩展方法

当我添加

<%@ Import Namespace="IDD.App_Code" %>
我明白了      以下方法或属性之间的调用不明确:'IDD.App_Code.BooleanExtensions.ToYesNoString(bool?)'和'IDD.App_Code.BooleanExtensions.ToYesNoString(bool?)'

3 个答案:

答案 0 :(得分:4)

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

你需要像Claudio的答案

一样导入如下的命名空间
<%@ Import Namespace="My.Namespace.Containing.MyExtensions.Class" %>

答案 1 :(得分:3)

尝试添加输入扩展方法所在的命名空间

<%@ Import Namespace="YourNameSpace" %>

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

答案 2 :(得分:2)

首先,您需要一个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"))