在不使用递归的情况下,对二叉树进行后序遍历的算法是什么?
是否可以在C#中覆盖类的null-coalescing运算符?
比方说,如果实例为null,我想返回默认值,如果不是,则返回实例.代码看起来像这样:
return instance ?? new MyClass("Default");
Run Code Online (Sandbox Code Playgroud)
但是如果我想使用null-coalescing运算符来检查是否设置了MyClass.MyValue呢?
当然没有真正的需要(至少我是这么认为) - 所以在你回答"你为什么要这样做"之前 - 我只是好奇是否有可能.
有没有办法在C#中使用内部setter序列化属性?
我知道这可能有问题 - 但如果有办法 - 我想知道.
例:
[Serializable]
public class Person
{
public int ID { get; internal set; }
public string Name { get; set; }
public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
序列化类Person实例的代码:
Person person = new Person();
person.Age = 27;
person.Name = "Patrik";
person.ID = 1;
XmlSerializer serializer = new XmlSerializer(typeof(Person));
TextWriter writer = new StreamWriter(@"c:\test.xml");
serializer.Serialize(writer, person);
writer.Close();
Run Code Online (Sandbox Code Playgroud)
结果(缺少ID属性):
<?xml version="1.0" encoding="utf-8"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Name>Patrik</Name>
<Age>27</Age>
</Person>
Run Code Online (Sandbox Code Playgroud) 我需要找出运行C#应用程序的计算机的外部 IP.
在应用程序中,我有一个连接(通过.NET远程处理)到服务器.有没有一种很好的方法来获取服务器端的客户端地址?
(我已经编辑了这个问题,要更清楚一些.我向所有那些尽力回答这个问题的人道歉,当时我可能有点太模糊了)
解决方案:
我发现了一种对我有用的方法.通过实现我可以访问CommonTransportKeys.IPAddress的自定义IServerChannelSinkProvider和IServerChannelSink,可以很容易地在CallContext上添加客户端ip.
public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack,
IMessage requestmessage, ITransportHeaders requestHeaders,
System.IO.Stream requestStream, out IMessage responseMessage,
out ITransportHeaders responseHeaders, out System.IO.Stream responseStream)
{
try
{
// Get the IP address and add it to the call context.
IPAddress ipAddr = (IPAddress)requestHeaders[CommonTransportKeys.IPAddress];
CallContext.SetData("ClientIP", ipAddr);
}
catch (Exception)
{
}
sinkStack.Push(this, null);
ServerProcessing srvProc = _NextSink.ProcessMessage(sinkStack, requestmessage, requestHeaders,
requestStream, out responseMessage, out responseHeaders, out responseStream);
return srvProc;
}
Run Code Online (Sandbox Code Playgroud)
然后(当我从客户端收到请求时)只需从CallContext获取IP就像这样.
public string GetClientIP()
{
// Get the client IP …Run Code Online (Sandbox Code Playgroud) C#在坚果壳中,我可以在列表框中显示图像吗?我有一个用户列表,我想在一些名称旁边显示绿色勾号,这可能吗?
谢谢
using (var writer = File.CreateText(fullFilePath))
{
file.Write(fileContent);
}
Run Code Online (Sandbox Code Playgroud)
鉴于上述代码,可以从中获知文件大小StreamWriter吗?
我有一个问题,这不是一个真正的问题,但是让我有点好奇的东西.
我有一个有两种方法的课程.一个是静态方法,另一个是实例方法.方法具有相同的名称.
public class BlockHeader
{
public static BlockHeader Peek(BinaryReader reader)
{
// Create a block header and peek at it.
BlockHeader blockHeader = new BlockHeader();
blockHeader.Peek(reader);
return blockHeader;
}
public virtual void Peek(BinaryReader reader)
{
// Do magic.
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试构建我的项目时,我收到一条错误消息:
以下方法或属性之间的调用不明确:'MyApp.BlockHeader.Peek(System.IO.BinaryReader)'和'MyApp.BlockHeader.Peek(System.IO.BinaryReader)'
我知道方法签名实际上是相同的,但我看不出我怎么可能直接从实例成员调用静态方法.
我认为有一个很好的理由,但有谁知道这是什么原因?
我一直在考虑这个问题,感觉必须有一个我想念的简单解决方案.
假设我有以下课程:
public class Foo<T>
{
public Foo(T value)
{
}
public Foo(int value)
{
}
}
Run Code Online (Sandbox Code Playgroud)
如果我得到类型的所有构造函数,Foo<System.Int32>我将返回两个构造函数,两个构造函数都具有System.Int32无法区分的单个参数类型.
如果我从Foo<System.Int32>(Foo<T>)的泛型类型定义中获取所有构造函数,我将返回两个构造函数.一个接受泛型参数T,一个接受类型参数System.Int32
// Will return two constructors with signatures that look identical.
var type = typeof(Foo<int>);
var ctors1 = type.GetConstructors();
// Will return two constructors as well. Parameters can be differentiated.
var genericTypeDefinition = typeof(Foo<int>).GetGenericTypeDefinition();
var ctors2 = genericTypeDefinition.GetConstructors();
Run Code Online (Sandbox Code Playgroud)
有没有办法在其泛型类型定义中将构造函数与其对应项进行匹配?
我必须编写一个简单的程序,使用OpenGL和C#在Windows窗体应用程序中绘制内容?你能给我一些图书馆和/或教程的例子吗?我发现了这个:http://sourceforge.net/projects/csgl/files/CsGL/1.4.1/但它是从2002年开始的.有什么新的吗?
在查看C#代码时,我经常会看到这样的模式:
DataType[] items = GetSomeItems();
OtherDataType[] itemProps = new OtherDataType[items.Length];
int i = 0;
foreach (DataType item in items)
{
// Do some stuff with item, then finally
itemProps[i] = item.Prop;
i++;
}
Run Code Online (Sandbox Code Playgroud)
for循环遍历对象items,但也保持counter(i)以进行迭代itemProps.我个人不喜欢这种额外的i闲逛,而是可能做的事情如下:
DataType[] items = GetSomeItems();
OtherDataType[] itemProps = new OtherDataType[items.Length];
for (int i = 0; i < items.Length; i++)
{
// Do some stuff with items[i], then finally
itemProps[i] = items[i].Prop;
}
Run Code Online (Sandbox Code Playgroud)
对于我不知道的第一种方法,是否有一些好处?这是每个人都试图使用这种花哨foreach (...)语法的结果吗?我对你的意见感兴趣.
c# ×9
.net ×5
winforms ×2
binary-tree ×1
for-loop ×1
generics ×1
listbox ×1
loops ×1
opengl ×1
reflection ×1
remoting ×1
streamwriter ×1
syntax ×1
traversal ×1