相关疑难解决方法(0)

为什么params表现得像这样?

产量

1

2

空值

2

class Program
{        
    static void Main(String[] args)
    {
        String s = null;
        PrintLength(s);
        PrintLength(s, s);
        PrintLength(null);
        PrintLength(null, null);    
        Console.ReadKey();
    }

    private static void PrintLength(params String[] items)
    {
        Console.WriteLine(items == null ? "null" : items.Length.ToString());
    }    
}
Run Code Online (Sandbox Code Playgroud)

c#

23
推荐指数
2
解决办法
820
查看次数

有没有办法从myFunc(new int [] {1,2,3}}中删除myFunc(1,2,3)?

向所有人提出问题C#向导.我有一个方法,称之为myFunc,它需要可变长度/类型参数列表.myFunc本身的参数签名是myFunc(params object[] args),我在列表上使用反射(例如,想想这有点像printf).

我想要myFunc(1, 2, 3)区别对待myFunc(new int[] { 1, 2, 3 }).也就是说,在myFunc的主体内,我想枚举我的参数的类型,并希望最终得到{int,int,int}而不是int [].现在我得到后者:实际上,我无法区分这两种情况,它们都以int []的形式出现.

我希望前者显示为obs [].长度= 3,obs [0] = 1等.

而且我曾预计后者会显示为obs [].长度= 1,其中obs [0] = {int [3]}

这可以做到,还是我问不可能?

c# params

9
推荐指数
3
解决办法
719
查看次数

使用params object []构造函数的属性会产生不一致的编译器错误

我收到了错误

属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式

请注意下面的截图:

在此输入图像描述

请注意,如果我将DataRow属性与一个或三个参数一起使用,则不会出现编译错误.但是如果我使用两个参数而第二个参数是一个字符串数组,那么我确实会遇到编译错误.

DataRowAttribute的签名是public DataRowAttribute (object data1);public DataRowAttribute (object data1, params object[] moreData);

第一个给了我没问题,但第二个似乎变得困惑.

我认为params object[]可能会引起一些混乱.也许它无法确定我的意思[DataRow(new[] { 1 }, new[] { "1" })]还是[DataRow(new[] { 1 }, "1")]

为了解决这个问题,我尝试将第二个属性转换为object([DataRow(new[] { 1 }, (object)new[] { "1" })]),但错误没有消失,它警告我演员阵容是多余的.我也尝试明确指定数组的类型,但这也没有帮助.

我可以添加第三个虚拟参数,即使null似乎解决了这个问题,但这只是一种解决方法.这样做的正确方法是什么?

c# .net-attributes

8
推荐指数
2
解决办法
505
查看次数

标签 统计

c# ×3

.net-attributes ×1

params ×1