比如C中的结构体为:
struct stru_test
{
int arrNumber[10];
}
在C#中应该怎么定义?
因为我在C#中使用构造函数,但是不允许有无参数的构造函数。
所以不知道怎么办了。
另外,C#中怎么使用#ifndef #define #endif 宏定义,是否可以使用?
18 个解决方案
#1
public class Student
{
public int[6] Scores { get; set; }
}
Student aaa = new Student();
aaa.Scores = new int[] { 1, 2, 3, 4, 5, 6 };
Console.WriteLine(string.Join(" ", aaa.Scores));
如果试图赋值超过限定量则提示错误。
#2
struct stru_test
{
public fixed int arrNumber[10];
}
http://msdn.microsoft.com/zh-cn/library/zycewsya.aspx
#3
好吧,把结构体改成为class ,但是你知道c#中是否可以使用#define 定义宏吗?
如果不能的话,知道为什么 玫举不能定义无名的呢?
比如:enum { EnTest = 10000 };
这样编译通不过。
c#中好像也不能用const 有没有什么办法。难道真的要我用数字。这太扯淡了!
#4
如果你可以不发这种错误代码误导别人那真是楼主的福气。
#5
另外,宏定义这么丑陋的东西是被C#所抛弃的。
为什么不可以用const?
为什么不可以用const?
#6
出现了一个错误:指针和固定大小缓冲区只能在不安全的上下文中使用。
#7
指定unsafe标签,在你的项目属性中勾选“允许不安全代码”
更多内容你可以在网上自行找寻答案
#8
struct stru_test
{
public fixed int arrNumber[10];
}
http://msdn.microsoft.com/zh-cn/library/zycewsya.aspx
出现了一个错误:指针和固定大小缓冲区只能在不安全的上下文中使用。
指定unsafe标签,在你的项目属性中勾选“允许不安全代码”
更多内容你可以在网上自行找寻答案
3Q 你实在是帮了我大忙了,但是还有一个问题是结构体中的结构体数组,这个不不能用unsafe fixed ;
有什么别的方法没?
#9
struct stru_test
{
public fixed int arrNumber[10];
}
http://msdn.microsoft.com/zh-cn/library/zycewsya.aspx
出现了一个错误:指针和固定大小缓冲区只能在不安全的上下文中使用。
指定unsafe标签,在你的项目属性中勾选“允许不安全代码”
更多内容你可以在网上自行找寻答案
3Q 你实在是帮了我大忙了,但是还有一个问题是结构体中的结构体数组,这个不不能用unsafe fixed ;
有什么别的方法没?
结构体数组也可以用fixed
但是要求数组中的结构体是定长的,也就是这个结构体只包含值类型的字段。另外你用来交互的话推荐你自定义结构的布局。
#10
结构体数组也可以用fixed
但是要求数组中的结构体是定长的,也就是这个结构体只包含值类型的字段。另外你用来交互的话推荐你自定义结构的布局。
不明白什么是自定义结构的布局,不过这个不重要,如果方便的话,一两句话讲讲。
另外,我在结构体中定义一个结构体数组是编译不过的:
struct GLOBAL_WAYPOINT
{
int a;
int b;
int c;
short d;
short e;
short f;
short g;
};
struct stru_use
{
// 编译时提示固定大小的缓冲区类型必须为基础数据类型
public unsafe fixed GLOBAL_WAYPOINT globalWaypoint[100];
};
#11
结构体数组也可以用fixed
但是要求数组中的结构体是定长的,也就是这个结构体只包含值类型的字段。另外你用来交互的话推荐你自定义结构的布局。
不明白什么是自定义结构的布局,不过这个不重要,如果方便的话,一两句话讲讲。
另外,我在结构体中定义一个结构体数组是编译不过的:
struct GLOBAL_WAYPOINT
{
int a;
int b;
int c;
short d;
short e;
short f;
short g;
};
struct stru_use
{
// 编译时提示固定大小的缓冲区类型必须为基础数据类型
public unsafe fixed GLOBAL_WAYPOINT globalWaypoint[100];
};
我的错,确实不行,看来我想多了
在 C# 中,可以使用 fixed 语句在数据结构中创建带有固定大小数组的缓冲区。 使用现有代码(如使用其他语言、预先存在的 DLL 或 COM 项目编写的代码)时,这种方法非常有用。 固定数组可采用允许普通结构成员使用的任何特性或修饰符。 唯一的限制是,数组类型必须是 bool、byte、 char、 short、int、long、sbyte、ushort、uint、ulong、float 或 double。
#12
我的错,确实不行,看来我想多了
在 C# 中,可以使用 fixed 语句在数据结构中创建带有固定大小数组的缓冲区。 使用现有代码(如使用其他语言、预先存在的 DLL 或 COM 项目编写的代码)时,这种方法非常有用。 固定数组可采用允许普通结构成员使用的任何特性或修饰符。 唯一的限制是,数组类型必须是 bool、byte、 char、 short、int、long、sbyte、ushort、uint、ulong、float 或 double。
呵呵,兄弟,你掌握得很到位啊。小弟十分感谢!
虽然没能使用结构来做,不过我把结构体换成了类。数组的问题就算OK,算是解决了吧。
但是我还想请教一个问题就是:C# 中有没有办法可以取到一个变量的地址啊?
#13
既然转向C#为何还要用不安全模式?没说数组要固定,只是说定长.
#14
既然转向C#为何还要用不安全模式?没说数组要固定,只是说定长.
额,不是转向C#,只是用C#调用C++ DLL。
#15
啊哈哈哈....
我找到一个工具,简单的试了一下,似乎挺好用的样子,先分享出来,去工程中看好不好用。
是一个大神博客:
http://blog.csdn.net/Donjuan/article/details/3865026
我找到一个工具,简单的试了一下,似乎挺好用的样子,先分享出来,去工程中看好不好用。
是一个大神博客:
http://blog.csdn.net/Donjuan/article/details/3865026
#16
如果是在字节流中读取结构体可以这么定义
struct stru_use
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)]
public GLOBAL_WAYPOINT[] globalWaypoint;
};
#17
如果是在字节流中读取结构体可以这么定义
struct stru_use
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)]
public GLOBAL_WAYPOINT[] globalWaypoint;
};
OK, 3Q
#18
各种胡说八道
class fuck{
public int[] aa = new int[7];
}
class fuck{
public int[] aa = new int[7];
}
#1
public class Student
{
public int[6] Scores { get; set; }
}
Student aaa = new Student();
aaa.Scores = new int[] { 1, 2, 3, 4, 5, 6 };
Console.WriteLine(string.Join(" ", aaa.Scores));
如果试图赋值超过限定量则提示错误。
#2
struct stru_test
{
public fixed int arrNumber[10];
}
http://msdn.microsoft.com/zh-cn/library/zycewsya.aspx
#3
public class Student
{
public int[6] Scores { get; set; }
}
Student aaa = new Student();
aaa.Scores = new int[] { 1, 2, 3, 4, 5, 6 };
Console.WriteLine(string.Join(" ", aaa.Scores));
如果试图赋值超过限定量则提示错误。
好吧,把结构体改成为class ,但是你知道c#中是否可以使用#define 定义宏吗?
如果不能的话,知道为什么 玫举不能定义无名的呢?
比如:enum { EnTest = 10000 };
这样编译通不过。
c#中好像也不能用const 有没有什么办法。难道真的要我用数字。这太扯淡了!
#4
public class Student
{
public int[6] Scores { get; set; }
}
Student aaa = new Student();
aaa.Scores = new int[] { 1, 2, 3, 4, 5, 6 };
Console.WriteLine(string.Join(" ", aaa.Scores));
如果试图赋值超过限定量则提示错误。
如果你可以不发这种错误代码误导别人那真是楼主的福气。
#5
另外,宏定义这么丑陋的东西是被C#所抛弃的。
为什么不可以用const?
为什么不可以用const?
#6
struct stru_test
{
public fixed int arrNumber[10];
}
http://msdn.microsoft.com/zh-cn/library/zycewsya.aspx
出现了一个错误:指针和固定大小缓冲区只能在不安全的上下文中使用。
#7
struct stru_test
{
public fixed int arrNumber[10];
}
http://msdn.microsoft.com/zh-cn/library/zycewsya.aspx
出现了一个错误:指针和固定大小缓冲区只能在不安全的上下文中使用。
指定unsafe标签,在你的项目属性中勾选“允许不安全代码”
更多内容你可以在网上自行找寻答案
#8
struct stru_test
{
public fixed int arrNumber[10];
}
http://msdn.microsoft.com/zh-cn/library/zycewsya.aspx
出现了一个错误:指针和固定大小缓冲区只能在不安全的上下文中使用。
指定unsafe标签,在你的项目属性中勾选“允许不安全代码”
更多内容你可以在网上自行找寻答案
3Q 你实在是帮了我大忙了,但是还有一个问题是结构体中的结构体数组,这个不不能用unsafe fixed ;
有什么别的方法没?
#9
struct stru_test
{
public fixed int arrNumber[10];
}
http://msdn.microsoft.com/zh-cn/library/zycewsya.aspx
出现了一个错误:指针和固定大小缓冲区只能在不安全的上下文中使用。
指定unsafe标签,在你的项目属性中勾选“允许不安全代码”
更多内容你可以在网上自行找寻答案
3Q 你实在是帮了我大忙了,但是还有一个问题是结构体中的结构体数组,这个不不能用unsafe fixed ;
有什么别的方法没?
结构体数组也可以用fixed
但是要求数组中的结构体是定长的,也就是这个结构体只包含值类型的字段。另外你用来交互的话推荐你自定义结构的布局。
#10
结构体数组也可以用fixed
但是要求数组中的结构体是定长的,也就是这个结构体只包含值类型的字段。另外你用来交互的话推荐你自定义结构的布局。
不明白什么是自定义结构的布局,不过这个不重要,如果方便的话,一两句话讲讲。
另外,我在结构体中定义一个结构体数组是编译不过的:
struct GLOBAL_WAYPOINT
{
int a;
int b;
int c;
short d;
short e;
short f;
short g;
};
struct stru_use
{
// 编译时提示固定大小的缓冲区类型必须为基础数据类型
public unsafe fixed GLOBAL_WAYPOINT globalWaypoint[100];
};
#11
结构体数组也可以用fixed
但是要求数组中的结构体是定长的,也就是这个结构体只包含值类型的字段。另外你用来交互的话推荐你自定义结构的布局。
不明白什么是自定义结构的布局,不过这个不重要,如果方便的话,一两句话讲讲。
另外,我在结构体中定义一个结构体数组是编译不过的:
struct GLOBAL_WAYPOINT
{
int a;
int b;
int c;
short d;
short e;
short f;
short g;
};
struct stru_use
{
// 编译时提示固定大小的缓冲区类型必须为基础数据类型
public unsafe fixed GLOBAL_WAYPOINT globalWaypoint[100];
};
我的错,确实不行,看来我想多了
在 C# 中,可以使用 fixed 语句在数据结构中创建带有固定大小数组的缓冲区。 使用现有代码(如使用其他语言、预先存在的 DLL 或 COM 项目编写的代码)时,这种方法非常有用。 固定数组可采用允许普通结构成员使用的任何特性或修饰符。 唯一的限制是,数组类型必须是 bool、byte、 char、 short、int、long、sbyte、ushort、uint、ulong、float 或 double。
#12
我的错,确实不行,看来我想多了
在 C# 中,可以使用 fixed 语句在数据结构中创建带有固定大小数组的缓冲区。 使用现有代码(如使用其他语言、预先存在的 DLL 或 COM 项目编写的代码)时,这种方法非常有用。 固定数组可采用允许普通结构成员使用的任何特性或修饰符。 唯一的限制是,数组类型必须是 bool、byte、 char、 short、int、long、sbyte、ushort、uint、ulong、float 或 double。
呵呵,兄弟,你掌握得很到位啊。小弟十分感谢!
虽然没能使用结构来做,不过我把结构体换成了类。数组的问题就算OK,算是解决了吧。
但是我还想请教一个问题就是:C# 中有没有办法可以取到一个变量的地址啊?
#13
既然转向C#为何还要用不安全模式?没说数组要固定,只是说定长.
#14
既然转向C#为何还要用不安全模式?没说数组要固定,只是说定长.
额,不是转向C#,只是用C#调用C++ DLL。
#15
啊哈哈哈....
我找到一个工具,简单的试了一下,似乎挺好用的样子,先分享出来,去工程中看好不好用。
是一个大神博客:
http://blog.csdn.net/Donjuan/article/details/3865026
我找到一个工具,简单的试了一下,似乎挺好用的样子,先分享出来,去工程中看好不好用。
是一个大神博客:
http://blog.csdn.net/Donjuan/article/details/3865026
#16
如果是在字节流中读取结构体可以这么定义
struct stru_use
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)]
public GLOBAL_WAYPOINT[] globalWaypoint;
};
#17
如果是在字节流中读取结构体可以这么定义
struct stru_use
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)]
public GLOBAL_WAYPOINT[] globalWaypoint;
};
OK, 3Q
#18
各种胡说八道
class fuck{
public int[] aa = new int[7];
}
class fuck{
public int[] aa = new int[7];
}