请考虑以下C#代码.
string[] stringArray = new string[10];
foreach (string s in stringArray)
s = "a new string"; // Compiler error - Can't assign to foreach iteration variable
Run Code Online (Sandbox Code Playgroud)
现在考虑以下有效的 C++/CLI代码.
array<String^>^ stringArray = gcnew array<String^>(10);
for each(String^% s in stringArray)
s = "a new string";
Run Code Online (Sandbox Code Playgroud)
当foreach与数组类型一起使用时,编译器将其转换为普通for循环.对于C#和C++/CLI,此实现是相同的.所以我想知道C++/CLI是否可以允许这样做,为什么不能用于C#编译器呢?
当类型不是数组时,此错误是有意义的,因为foreach它将被编译为GetEnumerator调用并使用枚举器进行迭代.但我认为可以允许数组类型.
有什么想法吗?
作为旁注,以下是有效的C++/CLI代码,但不会产生预期的结果.
List<String^>^ stringList = gcnew List<String^>(10);
for each(String^% s in stringList)
s = "a new string"; // I think this should be prevented by compiler …Run Code Online (Sandbox Code Playgroud) 我正在使用go和protocol buffers.go程序将编码的协议缓冲消息发送到连接到套接字的客户端.现在,由于协议缓冲区没有分隔,客户端不知道从套接字读取多少数据.
我打算在消息前加上一个32位整数的消息长度.因此客户端可以读取4个字节,获取长度并读取完整的消息.
我可以使用binary包将整数值放入bytes数组中.就像是,
binary.Write(buf, binary.LittleEndian, value)
Run Code Online (Sandbox Code Playgroud)
现在的问题是,write需要一个字节顺序,接收端将如何知道字节顺序是什么?有没有办法在不指定显式字节顺序的情况下处理这个问题?
请考虑以下代码.
struct foo
{
};
template<typename T>
class test
{
public:
test() {}
const T& value() const
{
return f;
}
private:
T f;
};
int main()
{
const test<foo*> t;
foo* f = t.value();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
t是一个const变量,value()是一个返回的常量成员函数const T&.AFAIK,const类型不能分配给非const类型.但如何foo* f = t.value();编译好.如何发生这种情况以及如何确保value()只能分配给const foo*?
编辑
我发现,这是在使用模板时发生的.以下代码按预期工作.
class test
{
public:
test() {}
const foo* value() const { return f; }
private:
foo* f;
};
int …Run Code Online (Sandbox Code Playgroud) Silverlight 在文本框中将少数中文字符呈现为粗体。该文本框没有设置字体系列。请参考以下截图

在上面的屏幕截图中,第一个字符比另一个字符更粗。MSDN 的一篇文章称这是由于字体系列问题造成的,设置SimSun字体系列应该可以解决该问题。这是应用字体系列后的屏幕截图。

看起来设置SimSun确实解决了问题。但我不确定这是否是正确的解决方案,因为我的应用程序允许以任何语言输入数据,而不仅仅是中文。所以我不想将字体系列设置为中文字体。
我想知道,由于数据是 Unicode (UTF16) 编码的,渲染引擎应该负责选择正确的字体并正确渲染它,对吗?
我正在寻找正确的方法来解决这个问题。任何的意见都将会有帮助。
将 Silverlight 3 与 .NET3.5 结合使用。