小编Unf*_*ven的帖子

C#:为什么字典比列表快得多?

我正在测试从Dictionary VS列表中获取数据的速度.
我用这段代码来测试:

    internal class Program
{
    private static void Main(string[] args)
    {
        var stopwatch = new Stopwatch();
        List<Grade> grades = Grade.GetData().ToList();
        List<Student> students = Student.GetStudents().ToList();

        stopwatch.Start();
        foreach (Student student in students)
        {
            student.Grade = grades.Single(x => x.StudentId == student.Id).Value;
        }
        stopwatch.Stop();
        Console.WriteLine("Using list {0}", stopwatch.Elapsed);
        stopwatch.Reset();
        students = Student.GetStudents().ToList();
        stopwatch.Start();
        Dictionary<Guid, string> dic = Grade.GetData().ToDictionary(x => x.StudentId, x => x.Value);
        foreach (Student student in students)
        {
            student.Grade = dic[student.Id];
        }
        stopwatch.Stop();
        Console.WriteLine("Using dictionary {0}", stopwatch.Elapsed);
        Console.ReadKey();
    }
}

public …
Run Code Online (Sandbox Code Playgroud)

.net c# performance

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

LINQ:动态选择

考虑我们有这个类:

    public  class Data
{
    public string Field1 { get; set; }
    public string Field2 { get; set; }
    public string Field3 { get; set; }
    public string Field4 { get; set; }
    public string Field5 { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

如何动态选择指定列?这样的事情:

  var list = new List<Data>();

  var result= list.Select("Field1,Field2"); // How ?
Run Code Online (Sandbox Code Playgroud)

这是唯一的解决方案=> 动态LINQ 吗?
编译时不知道所选字段.它们将在运行时指定

c# linq

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

将SQL地理转换为C#

这个地理空间T-SQL代码的C#等价物是什么?

DECLARE @g geography;
DECLARE @h geography;
SET @g = geography::STGeomFromText('POLYGON((-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))', 4326);
SET @h = geography::Point(47.653, -122.358, 4326)

SELECT @g.STIntersects(@h)
Run Code Online (Sandbox Code Playgroud)

我试图使用SqlGeometry数据类型在多边形中找到一个点- 并且可以使用上面的T-SQL; 但我不明白如何实现等效的C#代码.

c# t-sql sql-server sqlgeography

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

MVVM:在ViewModels之间共享数据

如何在多个ViewModel之间共享数据?

例如,在应用程序中有一个名为Project的类.

    public class Project : ModelBase
{
    private string _projectName;

    public string ProjectName
    {
        get { return _projectName; }
        set
        {
            _projectName = value;
            RaisePropertyChanged(() => ProjectName);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在多个ViewModels应用程序中应该访问ActiveProject.
在ViewModels之间共享Project的最佳方法是什么?

  • 调解员模式?(消息)
  • 静态对象
  • 单身模式(如果是的话怎么样?)

我之前使用过Messaging但它需要很多编码.对于所有ViewModel,我要创建ActiveProject属性,还必须注册一个messenger来更新它.


我使用MVVM Light框架.
任何代码示例将不胜感激.

c# wpf design-patterns mvvm

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

绑定DataGridComboBoxColumn

我试图将ObservableCollection的T绑定到DataGrid的DataGridComboBoxColumn.
DataGrid定义是:

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Model, IsAsync=True}">

     <DataGrid.Columns>
         <DataGridTextColumn  Header="Column Entry"  IsReadOnly="True" Binding="{Binding ColumnName}"/>
         <DataGridComboBoxColumn Header="Road Type" ItemsSource="{Binding RoadTypes}"/>
    </DataGrid.Columns>

</DataGrid>
Run Code Online (Sandbox Code Playgroud)

这是ViewModel和Model

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        var viewModel = new ViewModel();
        DataContext = viewModel;
    }
}

public class ViewModel : ViewModelBase
{
    private ObservableCollection<Model> _model;

    public ViewModel()
    {
        var list = new List<Model>();
        var roadTypes = new ObservableCollection<RoadType>
                            {
                                new RoadType
                                    {
                                        Code = 1,
                                        Id = 1,
                                        Name = "Name1"
                                    },
                                new …
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml binding datagrid

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