如何将类型存储为变量并在参数类型中使用它们?

时间:2012-02-28 12:48:43

标签: c#

class constType
{
    public static const Type messageType = typeof(int); // HOW TO DO THIS? 1st mark

    public string[] GetArraySomehow()
    {
        return new string[sizeof(messageType)]; // HOW TO DO THIS? 2nd mark
    }
}

class testTypeInClass
{
    public void test(constType.messageType message) // HOW TO DO THIS? 3rd mark
    {

    }
}

好的,我知道这真的很奇怪和奇怪,但我怎么能这样做?

  • 第一个标记:我必须将int的类型存储为const变量并稍后使用它
  • 第二个标记:我必须得到存储类型的大小(它等于多少字节?)
  • 第3个标记:我必须将其用作参数类型。

那么为什么我必须做这样的事情:

我必须存储一个类型(不是那么宽,我知道我会使用int8,16,32等) 并且必须知道它究竟与字节完全相同(1,2,4等...);

首先,我的一个类中有一个方法,它使用switch语句和:

像这样:

  public string test (int messageIndex)
    {
        switch (messageIndex)
        {
            case 0:
                return "etc.. etc..";
            case 1231412:
                return "whatever";
        }
    }

首先,我有一些这样的方法:

public int fixForSwitchStatement(byte[] messageIndex)
    {
        byte[] RValue = new byte[4];

        for (int i = 0; i <= messageIndex.Length - 1; i++)
        {
            RValue[i] = messageIndex[i];
        }
        for (int i = messageIndex.Length; i <= 4 - messageIndex.Length - 1; i++)
        {
            RValue[i] = 0;
        }

        return BitConverter.ToInt32(RValue, 0);
    }

我将字节或短字传递给switch语句,然后我转换为int(int是我指定的类型),我想像这样进行重新设计。

public string test (/* [what's the case limit? that I've determined?] */ messageIndex)
    {
        switch (messageIndex)
        {
            case 0:
                return "etc.. etc..";
            case 1231412:
                return "whatever";
        }
    }

因为我不想再使用fixSwitch ...方法了。我只需要一个指定类型的所有这些概念。

为什么我必须使用fixSwitch而不是像(int)somethingByte那样进行类型转换?

在我的一个类中有一个名为communicationSize的东西,它是我必须声明的messageIndex事件的最大字节数。这是我的服务器 - 客户端项目。有一个messageIndex事件被用作请求索引服务器和客户端相互请求的内容。我用字节来限制它。用于从连接中保存一些数据空间。

// still is being written

1 个答案:

答案 0 :(得分:1)

我不确定目标是什么,并且在此期间编辑了这个问题但是使用泛型的一些示例代码可能会对您有所帮助。

class constType<T> where T : struct
{
    public T GetT()
    {
        return new T();
    }

    public string[] GetArraySomehow()
    {
        var len = Marshal.SizeOf(typeof(T));
        return new string[len];
    }
}

class testTypeInClass
{
    public void test<T>(T message) where T : struct
    {

    }
}

class MyClass
{
    void Test()
    {
        var constType = new constType<int>();

        var typeInClass = new testTypeInClass();

        var t = constType.GetT();

        typeInClass.test(t);

    }
}