J#在C#中无效?

时间:2011-01-21 12:19:46

标签: c# javascript asp.net

C#中有类似Javascript的void运算符吗? Javascript的void,“评估表达式并丢弃结果,返回undefined”。因此,我正在寻找内置的“评估”并返回null,或者可能是默认类型。 (所以它应该类似于null-coalescing ??运算符的反转。)

使用示例:

Person a;

public void main() {
    var x = void(a = new Person());
    // x should contain null
}

class Person { }

(由于非法使用关键字“void”,示例无法编译,自然。)

我目前正在使用它 - 这有效 - 但感觉很狡猾:

protected object voided(object ob) {
    return null;
}

编辑。好的,所以我肯定需要添加更多细节。我在ASP.NET代码中使用内联DataBind表达式中的代码。 E.g:

<asp:Repeater runat="server">
   <ItemTemplate>
       </tr><%# voided(globalPersonVariable = (Person)Container.DataItem)) %></tr>
   </ItemTemplate>
</asp:Repeater>

遗憾的是,使用default不适用于此 (我第一次没有包含这些附加信息,因为我想保持它是一个“纯粹的”C#-question,而不是ASP.NET。)

5 个答案:

答案 0 :(得分:4)

你正在寻找这样的东西吗?

var x = default(Person) // null
var i = default(int) // 0

答案 1 :(得分:2)

你可以制作一个扩展方法,Voided()

public static object Voided<TType>(this TType tThis)
{
    return null;
}

然后你可以这样称呼它:

(globalPersonVariable = (Person)Container.DataItem)).Voided()

如果您想将此与其他人提到的默认内容相结合,则会更改为:

public static TType Voided<TType>(this TType tThis)
{
    return default(TType);
}

答案 2 :(得分:1)

不确定void函数在javascript中的功能,但要获取类型的默认值,请使用default关键字:

protected T voided<T>(T obj) {
    return default(T);
}

答案 3 :(得分:0)

答案 4 :(得分:0)

我只想将这两个片段放入混音中。 两者都有效,但他们仍然觉得比必要的更冗长。

(globalPersonVariable = (Person)(Container.DataItem)) == null ? null : null

((Func<object,object>)(x => null))(globalPersonVariable = (Person)(Container.DataItem))

对于数据绑定目的,您还可以发出空字符串:

(globalPersonVariable = (Person)(Container.DataItem)) == null ? "" : ""

这种区别可能看起来微不足道,但这可以使您免于需要施放 在某些情况下的空值。