小编Pat*_*son的帖子

二阶树的发布顺序遍历而不递归

使用递归的情况下,对二叉树进行后序遍历的算法是什么?

binary-tree traversal non-recursive

59
推荐指数
4
解决办法
9万
查看次数

可以覆盖null合并运算符吗?

是否可以在C#中覆盖类的null-coalescing运算符?

比方说,如果实例为null,我想返回默认值,如果不是,则返回实例.代码看起来像这样:

   return instance ?? new MyClass("Default");  
Run Code Online (Sandbox Code Playgroud)

但是如果我想使用null-coalescing运算符来检查是否设置了MyClass.MyValue呢?

当然没有真正的需要(至少我是这么认为) - 所以在你回答"你为什么要这样做"之前 - 我只是好奇是否有可能.

.net c# operator-overloading null-coalescing-operator

41
推荐指数
3
解决办法
3850
查看次数

可以序列化属性的内部setter吗?

有没有办法在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)

.net c# serialization

28
推荐指数
2
解决办法
2万
查看次数

在C#中通过远程处理获取外部IP地址

我需要找出运行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)

.net c# remoting

20
推荐指数
4
解决办法
4万
查看次数

C#我可以在列表框中显示图像吗?

C#在坚果壳中,我可以在列表框中显示图像吗?我有一个用户列表,我想在一些名称旁边显示绿色勾号,这可能吗?

谢谢

c# listbox winforms

19
推荐指数
2
解决办法
3万
查看次数

从StreamWriter获取文件大小

using (var writer = File.CreateText(fullFilePath))
{
   file.Write(fileContent);
}
Run Code Online (Sandbox Code Playgroud)

鉴于上述代码,可以从中获知文件大小StreamWriter吗?

c# streamwriter

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

关于C#中模糊调用的问题

我有一个问题,这不是一个真正的问题,但是让我有点好奇的东西.

我有一个有两种方法的课程.一个是静态方法,另一个是实例方法.方法具有相同的名称.

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)'

我知道方法签名实际上是相同的,但我看不出我怎么可能直接从实例成员调用静态方法.

我认为有一个很好的理由,但有谁知道这是什么原因?

.net c# ambiguous-call

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

将构造函数匹配到泛型类型定义中的对应项

我一直在考虑这个问题,感觉必须有一个我想念的简单解决方案.

假设我有以下课程:

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)

有没有办法在其泛型类型定义中将构造函数与其对应项进行匹配?

c# generics reflection

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

WinForms中的C#中的OpenGL

我必须编写一个简单的程序,使用OpenGL和C#在Windows窗体应用程序中绘制内容?你能给我一些图书馆和/或教程的例子吗?我发现了这个:http://sourceforge.net/projects/csgl/files/CsGL/1.4.1/但它是从2002年开始的.有什么新的吗?

c# opengl winforms

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

使用foreach(...)语法,同时在循环内增加索引变量

在查看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 (...)语法的结果吗?我对你的意见感兴趣.

.net c# syntax loops for-loop

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