小编Nav*_*K N的帖子

更改foreach迭代变量和C#与C++/CLI之间的实现差异

请考虑以下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)

.net c# foreach c++-cli

1
推荐指数
1
解决办法
1828
查看次数

从套接字读取消息时如何获取字节序?

我正在使用goprotocol buffers.go程序将编码的协议缓冲消息发送到连接到套接字的客户端.现在,由于协议缓冲区没有分隔,客户端不知道从套接字读取多少数据.

我打算在消息前加上一个32位整数的消息长度.因此客户端可以读取4个字节,获取长度并读取完整的消息.

我可以使用binary包将整数值放入bytes数组中.就像是,

binary.Write(buf, binary.LittleEndian, value)
Run Code Online (Sandbox Code Playgroud)

现在的问题是,write需要一个字节顺序,接收端将如何知道字节顺序是什么?有没有办法在不指定显式字节顺序的情况下处理这个问题?

sockets networking encoding go protocol-buffers

1
推荐指数
1
解决办法
251
查看次数

const正确性和返回值 - C++

请考虑以下代码.

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)

c++ constants const-correctness

0
推荐指数
1
解决办法
973
查看次数

中文字符以粗体呈现

Silverlight 在文本框中将少数中文字符呈现为粗体。该文本框没有设置字体系列。请参考以下截图

汉字以粗体显示

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

Simsun 字体系列修复它

看起来设置SimSun确实解决了问题。但我不确定这是否是正确的解决方案,因为我的应用程序允许以任何语言输入数据,而不仅仅是中文。所以我不想将字体系列设置为中文字体。

我想知道,由于数据是 Unicode (UTF16) 编码的,渲染引擎应该负责选择正确的字体并正确渲染它,对吗?

我正在寻找正确的方法来解决这个问题。任何的意见都将会有帮助。

将 Silverlight 3 与 .NET3.5 结合使用。

.net c# silverlight wpf internationalization

0
推荐指数
1
解决办法
3605
查看次数