C# 如何判断一个引用是数组类型?

问答原文:
[i]string[] a;
int[] b;

// 这样可以判断,但是不是我想要的写法,因为is判断不仅限于类型相等,前者是后者的子类也返回true
// 虽然Array不会有子类,但是我希望写法和其他代码统一风格
if (a is Array){ .... // true
if (b is Array){ .... // true


// 我想要类似这样的写法
if (a.GetType() == typeof(Array)){ .... // false
// 但==左边是String[],右边是System.Array,等式不成立

// 我又不能写成
if (a.GetType() == typeof(string[])){ ... // true
// 因为不仅仅是string数组,int数组,其他数组都希望被检查出来
// 用object[]也不行
if (a.GetType() == typeof(object[])){ ... // false [/i]

我的解答:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace TypeCheck
{
class Program
{
static void Main(string[] args)
{
string[] b = new string[] {"1", "2", "3"};
Console.WriteLine(typeof(string[]));
Console.WriteLine("The type is {0}", b.GetType());
if (b.GetType().IsArray)
Console.WriteLine("Its true");
else
Console.WriteLine("ITs false");
if (b.GetType() == typeof(string[]))
{
Console.WriteLine("true");
}
else
{
Console.WriteLine("false");
}
Console.Read();
}
}
}


RednaxelaFX的答案:

using System;

static class Demo {
static bool IsArray(this object o) {
return o is Array;
}

static bool IsArray2(this object o) {
if (null == o) return false;
return o.GetType().BaseType == typeof(Array);
}

static void Main(string[] args) {
Console.WriteLine("args is array: {0}", args.IsArray());
Console.WriteLine("args is array: {0}", args.IsArray2());
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值