【发布时间】:2012-04-10 08:50:31
【问题描述】:
我有这些课程:
interface Info{}
class AInfo : Info { }
class BInfo : Info { }
class SendInfo {
static public f_WriteInfo(params Info[] _info) {
}
}
class Test {
static void Main() {
SendInfo.f_WriteInfo(
new[] {
new AInfo(){ ... },
new BInfo(){ ... },
} );
// This will generate an error.
// There will be need casting between new and [] like new Info[]
}
}
有没有什么方法可以在不强制转换的情况下做到这一点?
喜欢:
class SendInfo {
static public f_WriteInfo(params T _info) where T : Info {
【问题讨论】:
-
new Info[]有什么问题?这不是铸造。从技术上讲,您不需要数组,您可以在使用params时提供逗号分隔的参数:WriteInfo(info1, info2); -
顺便说一句,
params关键字意味着您不必在调用方法时显式创建数组,您只需执行MyMethod(firstParam, secondParam, thirdParam); -
问题是
new[]在这种情况下被解释为object[] -
另请注意,您提供的代码应类似于:
params Info[] infos,使用params时请注意参数周围的数组语法。 -
@RonKlein:不,
new[]在这种情况下根本不会编译。数组类型必须是其中一个表达式的类型。
标签: c# inheritance where array-initialization