小编Cau*_*tix的帖子

如何允许类属性在c#中具有多种/灵活类型?

在C#中,我有三个类:Person,Cat和Dog.

Cat和Dog类都有方法Eat().

我希望Person类有一个属性'Pet'.

我希望能够通过Person之类的Person.Pet.Eat()调用Cat和Dog的Eat方法,但我不能,因为Pet属性需要是Cat或Dog类型.

目前我正在使用Person类中的两个属性:PetDog和PetCat.

现在这没关系,但如果我想要100种不同类型的动物作为宠物,那么我真的不想在Person类中拥有100种不同的Pet属性.

有没有办法使用接口或继承?有没有办法可以将Pet设置为Object类型,但仍然可以访问分配给它的动物类的属性?

c# polymorphism

5
推荐指数
2
解决办法
299
查看次数

XamlReader生成DataTemplate的问题

我正在尝试在我的WPF项目中实现下面的代码,以便为具有动态列的DataGrid动态生成DataTemplates.我在这里找到了StackOverflow上的代码

public DataTemplate Create(Type type)
{
  return (DataTemplate)XamlReader.Load(
          @"<DataTemplate
            xmlns=""http://schemas.microsoft.com/client/2007"">
            <" + type.Name + @" Text=""{Binding " + ShowColumn + @"}""/>
            </DataTemplate>"
   );
}
Run Code Online (Sandbox Code Playgroud)

但是,在XamlReader.Load代码上,我收到错误"无法从'string'转换为'System.Xaml.XamlReader'.

我试图通过将代码更改为:

return (DataTemplate)XamlReader.Load(XmlReader.Create(
Run Code Online (Sandbox Code Playgroud)

但是我在字符串中传递无效字符时遇到错误.

另外,我不确定如何将TextBlock传递给此代码.我想我会创建一个TextBlock并将其作为Type参数传递,但我得到错误"无法从'System.Windows.Controls.TextBlock'转换为'System.Type'

任何帮助赞赏.

silverlight wpf xaml datatemplate xamlreader

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

如何跨多台机器(如渲染农场)运行C#任务并行库?

我正在使用TPL在C#中编写计算密集型程序.一些初步基准测试通过使用具有更多内核/线程的处理器显示出计算时间的显着减少.

但是,单个CPU上可用的线程数量有限(我认为即使是最好的Xeons资金也可以购买,目前大约有16个).

我一直在阅读有关如何在自己的机器中使用多个廉价CPU的"网格"渲染农场是增加整体核心数量的好方法,但我不知道如何实现其中一个.它是在操作系统级别使用Microsoft服务器技术实现的(如果是,如何实现?),还是我还需要修改C#代码本身?

任何帮助或现有信息的链接将不胜感激.

c# multithreading multicore task-parallel-library

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

非递归算法,用于根据数字集确定所有可能的总和

我正在寻找一种非递归算法(最好是在C#中),它将生成一组正数的所有和的列表.

例如,对于一组三个数字"1,2,3",以下七个总和是可能的:

1

2

3

1 + 2 = 3

1 + 3 = 4

2 + 3 = 5

1 + 2 + 3 = 6

最大设置大小将在50左右.我知道如何递归地处理这个问题,但是在处理类似问题时过去一直受到调用堆栈的限制,所以这次想要避免它.

c# algorithm math recursion set

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

C# - "对象引用未设置为对象的实例"

我正在尝试检查引用是否为空,然后'MyMethod'使用它:

if (School.ClassRoom.Pupil.Age != null)
        {
            MyMethod(School.ClassRoom.Pupil.Age);
        }
Run Code Online (Sandbox Code Playgroud)

但是,我仍然在第一行得到"对象引用未设置为对象的实例",因为不仅Age为null,而且Pupil和ClassRoom有时也为null.

我使用Try,Catch,最后得到了相同的问题,因为我在Try代码中遇到了同样的错误.

我不想要检查每个ClassRoom为null,然后每个Pupil为null,然后每次Age为null,每次我想使用此方法.

有更简单的方法吗?

c# null exception-handling

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

具有复杂背景计算的响应式GUI的多线程C# - async/await,TPL或两者兼而有之?

我有一个单线程程序,它执行复杂,耗时的计算并报告这些程序的进度.

    private void BtnExecute_Click()
    {
        ComplexCalculation(Object1);
        ComplexCalculation(Object2);
        ComplexCalculation(Object3);
    }
Run Code Online (Sandbox Code Playgroud)

ComplexCalculation方法如下所示:

private void ComplexCalculation(Object MyObject)
{
   (...do some time consuming operation on MyObject...);
   WriteToTextboxGUI("50% Complete" + MyObject.Name);
   (...do another time consuming operation on MyObject...);
   WriteToTextboxGUI("100% Complete" + MyObject.Name);
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,该WriteToTextboxGUI(string)方法使用进度更新GUI上的文本框.

我正在寻求采用多线程方法,以便在执行复杂计算时GUI保持响应.我已经阅读了相当多的内容BackgroundWorker,Threads一般情况下,以及当TaskTPL与.Net 4.0一起进入现场时如何简化/改进,现在如何AsyncAwait已经到达.Net 4.5,并想知道这些是否更新的技术可以让我重新编写我的应用程序(使用相对简单的代码),以便它可以:

  • 同时使用多个线程执行复杂计算
  • 像以前一样向我的GUI报告进度
  • 始终保持响应式GUI

任何人都可以指出一个满足这三个标准的简单解决方案吗?

PS此应用程序不会在服务器上运行,它将在桌面上的WPF中运行.

c# parallel-processing asynchronous task-parallel-library

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

硬编码XAML比代码隐藏生成的XAML更快吗?

我有一个WPF用户控件,其中包含许多文本框和按钮.目前,只要创建控件的实例,这些文本框和按钮都会通过后面的代码动态创建并加载到ItemsControl中.唯一的硬编码XAML是ItemsControl的声明.

有时这可能有点迟钝.如果我摆脱ItemsControl并将文本框和按钮硬编码到usercontrol的XAML中,会更快吗?

wpf xaml user-controls itemscontrol

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