c# - IPv6: Why changing ScopeId of System.Net.IPAddress is not reflected at ToString() representation? -


yesterday met thing seems .net bug.

ipaddress addr = ipaddress.parse("fe80::1111:2222:abc%11"); // scopeid 11  string s1 = addr.tostring(); // see fe80::1111:2222:abc%11 addr.scopeid = 0; // scopeid 0 string s2 = addr.tostring(); // expect see fe80::1111:2222:abc 

why s1 same content s2 after scopeid changed? in debugger watch window see scope value changed. internal string field has no impact.

for sure, tried various ipv6 addresses , different scope ids - behavior same. have missed?

i call bug in .net framework.

if @ source code ipaddress class:

http://referencesource.microsoft.com/#system/net/system/net/ipaddress.cs

you'll see .tostring() method caches results private field called m_tostring. however, if @ setter scopeid property, see changes private fields m_scopeid , m_address, not clear m_tostring value.

if @ address property, you'll see clear m_tostring field when property set.

if want work around, can did here:

how determine equality between 2 ipv6 addresses?

by using .getaddressbytes() method pass constructor create new instance. give scopeid of zero.


Comments

Popular posts from this blog

image - ClassNotFoundException when add a prebuilt apk into system.img in android -

I need to import mysql 5.1 to 5.5? -

Java, Hibernate, MySQL - store UTC date-time -