我正在运行服务器,我想显示自己的IP地址.
获取计算机自身(如果可能的话,外部)IP地址的语法是什么?
有人写了下面的代码.
IPHostEntry host;
string localIP = "?";
host = Dns.GetHostEntry(Dns.GetHostName());
foreach (IPAddress ip in host.AddressList)
{
if (ip.AddressFamily.ToString() == "InterNetwork")
{
localIP = ip.ToString();
}
}
return localIP;
Run Code Online (Sandbox Code Playgroud)
但是,我一般不信任作者,我不明白这段代码.有没有更好的方法呢?
我正在向要写入的方法发送一个流,在这些方法中我使用的是二进制阅读器/ wrtier.当读取器/写入器被处理时,using或者仅在未被引用时,流也被关闭?
我会发送一个BinaryReader/Writer,但我也在使用StreamReader(也许我应该绕过它.我只使用GetLine和ReadLine).如果每次作家/读者关闭时关闭流,这是非常麻烦的.
我不能成为唯一一个厌倦了定义和命名委托只需要一个需要委托的东西的人.例如,我想从可能的其他线程调用表单中的.Refresh(),所以我编写了这段代码:
private void RefreshForm()
{
if (InvokeRequired)
Invoke(new InvokeDelegate(Refresh));
else
Refresh();
}
Run Code Online (Sandbox Code Playgroud)
我甚至不确定我必须这样做,我只是读得足以害怕它在以后的某个阶段不起作用.
InvokeDelegate实际上是在另一个文件中声明的,但是我真的需要一个专门用于此的整个委托吗?根本没有任何通用代表?
我的意思是,例如,有一个Pen类,但也有Pens.选择笔,所以你不必重拍整个事情.它不一样,但我希望你理解我的意思.
我想在这个问题上做同样的事情,那就是:
enum DaysOfTheWeek {Sunday=0, Monday, Tuesday...};
string[] message_array = new string[number_of_items_at_enum];
...
Console.Write(custom_array[(int)DaysOfTheWeek.Sunday]);
Run Code Online (Sandbox Code Playgroud)
但是,我宁愿有一些不可或缺的东西,而不是写这个容易出错的代码.C#中是否有内置模块可以做到这一点?
假设这个C#代码:
using (MemoryStream stream = new MemoryStream())
{
StreamWriter normalWriter = new StreamWriter(stream);
BinaryWriter binaryWriter = new BinaryWriter(stream);
foreach(...)
{
binaryWriter.Write(number);
normalWriter.WriteLine(name); //<~~ easier to reader afterward.
}
return MemoryStream.ToArray();
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
MemoryStream.ToArray()合法吗?我使用using-block作为约定,我担心它会搞砸了.我正在使用winforms,我偶尔会更新一个文本框(显示消息).但是,当文本到达框的末尾时,它会生成滚动条,我不知道如何向下滚动到底部.我唯一看到的是ScrollToCaret,但Caret正处于文本的开头.滚动的命令是什么?
我想给我正在制作的课程提供一个链接列表.我希望该类写入该列表(例如通过.addLast()).
我应该使用ref关键字吗?
我对在C#中使用ref和out关键字的位置感到有些困惑,因为所有类都在堆上动态分配,我们实际上使用指针进行大多数操作.
当然,out和ref关键字作出原语和结构感.
另外,如果我不直接发送列表,但发送包含列表的类?(它是internal必需的),我还需要使用ref吗?或者如果我在函数之间传递它,ex:
void A(ref LinkedList<int> list){
B(list);
}
void B(ref LinkedList<int> list){
_myList = list;
}
Run Code Online (Sandbox Code Playgroud) 我正在使用C#,而且我无法从像C++这样的特定点开始发送数组,这很烦人.
假设这段代码:
int[] array = new int[32];
foobar (array + 4); //send array starting from the 4th place.
Run Code Online (Sandbox Code Playgroud)
这是C#的一种奇怪的语法,因为我们没有任何可用的指针,但肯定有办法吗?有.Skip(),但我认为它产生了一个新的数组,这是我不喜欢的.
我有什么选择?
基本上:
public delegate void RecvCommandHandler (ChatApplication sender, byte[] content);
event RecvCommandHandler[] commands = new RecvCommandHandler[255];
Run Code Online (Sandbox Code Playgroud)
我想为每个命令编号激活一个不同的方法/函数,但我真的不确定语法.我该怎么办呢?
我想我会选择一系列代表,但这个问题仍然很有趣.
我想做相当于这个:
byte[] byteArray;
enum commands : byte {one, two};
commands content = one;
byteArray = (byte*)&content;
Run Code Online (Sandbox Code Playgroud)
是的,它现在是一个字节,但考虑我将来要改变它?如何让byteArray包含内容?(我不在乎复制它).
c# ×10
arrays ×3
delegates ×1
enums ×1
events ×1
flush ×1
indexing ×1
ip-address ×1
keyword ×1
memorystream ×1
pointers ×1
reference ×1
scroll ×1
stream ×1
streamreader ×1
streamwriter ×1
textbox ×1
winforms ×1