C# 是否有方法内联初始化异常';谁的数据?
我想在不创建异常变量的情况下,抛出带有附加数据的异常。大概是这样的:C# 是否有方法内联初始化异常';谁的数据?,c#,.net,C#,.net,我想在不创建异常变量的情况下,抛出带有附加数据的异常。大概是这样的: throw new Exception() { Data.Add("foo", "bar") }; 有可能吗?看起来您应该可以通过以下方式实现: throw new Exception { Data = { { "foo", "bar" } } }; (假设您使用的是具有集合初始值设定项的C#3…) 当然,您可以结合构造函数参数执行此操作: throw new ArgumentException("paramName")
throw new Exception() { Data.Add("foo", "bar") };
有可能吗?看起来您应该可以通过以下方式实现:
throw new Exception { Data = { { "foo", "bar" } } };
(假设您使用的是具有集合初始值设定项的C#3…)
当然,您可以结合构造函数参数执行此操作:
throw new ArgumentException("paramName") { Data = { { "foo", "bar" } } };
不幸的是,您不能使用对象初始值设定项来调用这样的方法。它确实有一个
参数化构造函数
获取字符串
throw new Exception("Hello World");
问题并不十分清楚(即数据类型是什么…) 如果您的意思是需要将某些消息放入异常:
throw new Exception (Data.Add("foo", "bar").ToString());
这是否意味着
throw
将指针抛出到新的Exception
对象?编辑:傻我,以为我是因为某些原因看C++问题,只是忽略我说的话。只是好奇为什么你要这么做?new Exception()将创建一个新的异常变量。@luketorjussen:它将创建一个新对象,但不是一个新变量(在C#级别)。如果该方法被称为Add,并且数据属性类型实现IEnumerable,您就可以了……哇,不知道我可以在只读属性上使用它。顺便说一句,它应该是{{“foo”,“bar”}
,因为它是字典,它不是Data={{“foo”,“bar”}
,因为Data
属性是一个IDictionary?不是每个KeyValuePair都需要自己的一组大括号吗,或者这是不必要的语法吗?@Poma:你可以这样使用它,因为它是一个嵌入式对象初始值设定项;实际上,您并没有将数据设置为新集合,而是向其中添加项目。您也可以对值设置属性。谢谢。。。我没想到。我看到乔恩·斯基特想到了这一点,所以不要理会我的回答。