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
{
}
}
好的,我知道这真的很奇怪和奇怪,但我怎么能这样做?
那么为什么我必须做这样的事情:
我必须存储一个类型(不是那么宽,我知道我会使用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
答案 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);
}
}