小编iab*_*ott的帖子

为什么以下C#代码在可空的DateTime初始化时抛出NullReferenceException?

这是一些简单的代码:

    static void Main(string[] args)
    {
        var coll = new List<string> {"test", "test2", "test3"};

        var filteredColl = coll.Select(x => x).ToList();

        if (!filteredColl.Any())
        {
            DateTime? date = new DateTime();

            filteredColl = coll.Where(x => date.GetValueOrDefault().Date.ToString(CultureInfo.InvariantCulture) == x).Select(x => x).ToList();
        }
    }
Run Code Online (Sandbox Code Playgroud)

问题是,为什么以下步骤使其与NullReferenceException崩溃:

1)断点到if

断点

2)设置下一个执行点:

执行点

3)尝试继续使用F10:

例外

如果我注释掉代码的最后一行,它就不会崩溃.

更新:这是堆栈跟踪:

System.NullReferenceException was unhandled   HResult=-2147467261  
Message=Object reference not set to an instance of an object.  
Source=ConsoleApplication28   StackTrace:
       at ConsoleApplication28.Program.Main(String[] args) in Program.cs: line 21
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, …
Run Code Online (Sandbox Code Playgroud)

c# nullable nullreferenceexception

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

在C#中,当一个用法在基础构造函数调用中时,如何解决多个枚举警告?

以下代码给出了关于IEnumerable可能多次枚举的警告:

public ClassName(IEnumerable<OtherClassName> models) : base(models)
{
    _models.AddRange(models);
}
Run Code Online (Sandbox Code Playgroud)

由于"基本"调用,删除此警告的常规解决方案不起作用.我无法转换为列表,因为没有地方存储该列表.

我唯一的选择是让构造函数将列表作为参数吗?在这种情况下,这是推荐的做法吗?

c# ienumerable base

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

DataGrid中按钮的可见性

我有一个包含三列的DataGrid.

第三列中有一个删除按钮.它的可见性取决于名为'ControlsEnabled'的布尔属性.

DataGrid由"ObservableCollection"中的项填充.

问题是'ControlsEnabled'不是'ObservableCollection'中项目的属性,它不应该是.'ObservableCollection'是另一个类的属性.

问题:我应该如何更改我的XAML描述以解决我的问题?

<DataGrid.Columns>
    <DataGridTextColumn Binding="{Binding Path=field1}" 
                        Width="140" 
                        Header="head1"/>
    <DataGridTextColumn Binding="{Binding Path=field2}" 
                        Width="140" 
                        MinWidth="50" 
                        Header="head2"/>

    <DataGridTemplateColumn>
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <Button Padding="5" 
                        Click="DeleteButton_Click" 
                        Tag="{Binding}" 
                        Content="X" 
                        Visibility="{Binding Path=ControlsEnabled, Converter={StaticResource boolToVisibilityConverter}}">
                    <Button.ToolTip>
                        <TextBlock>
                            Delete
                        </TextBlock>
                    </Button.ToolTip>
                </Button>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>

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

谢谢!

c# wpf

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

C#SQL语句 - 查询中的语法错误.不完整的查询条款

下面是我的代码,我不能为我的生活解决查询有什么问题.

我最初有错误"没有给出一个或多个参数的值",这似乎已经消失了(虽然我甚至不知道为什么我得到它).

在此代码之前打开连接.参数GVars.thisFY是一个字符串="FY13" - 这个表肯定存在.参数GVars.currentDate是DateTime = today.

此[Destination]和[Next Collection]范围肯定存在记录:

string sql;
OleDbDataAdapter adapter;

sql = "SELECT * FROM @CurFY WHERE [Destination] = @Destination AND [Next Collection] BETWEEN @NextCollectionA AND @NextCollectionB;";

// Create the command object
OleDbCommand cmd = new OleDbCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;

// Add values to the fields
cmd.Parameters.AddWithValue("@CurFY", GVars.thisFY);
cmd.Parameters.AddWithValue("@Destination", "Henwood");
cmd.Parameters.AddWithValue("@NextCollectionA", GVars.currentDate);
cmd.Parameters.AddWithValue("@NextCollectionB", GVars.currentDate.AddDays(1));

adapter = new OleDbDataAdapter(cmd.CommandText, conn);

try
{
    adapter.Fill(ds);

    GVars.bLblLastUpdate = DateTime.Now.ToString("HH:mm:ss");
}
catch (Exception ex)
{
}
Run Code Online (Sandbox Code Playgroud)

编辑:我已经更改了代码以删除表参数,如下所示,仍然得到"没有给出一个或多个参数的值",虽然我无法确定..

编辑2:我删除了额外的东西,所以帖子只涉及原始问题,已被回答.我会为我奇怪的"没有给定值"错误提出一个新问题

c# sql ms-access-2003

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

为什么这个c#代码这么慢?目录/文件搜索和添加所需的优化

我已经编写了一些相当快速的代码,并且自从将其更改为"SearchOption.AllDirectories"后,即使只加载表单/应用程序也需要一分钟.

我能做些什么来使这个应用程序在加载时运行得更快?任何帮助/信息将不胜感激.

谢谢.

private const string path = @"R:\Folder One\Folder Two\Folder Three";

public frmMain()
{
    InitializeComponent();

    ListDirectory(treeView1, path);
    treeView1.SelectedNode = treeView1.Nodes[0];
    treeView1.SelectedNode.Expand();
}

private void ListDirectory(TreeView treeView, string path)
{
    treeView.Nodes.Clear();
    var rootDirectoryInfo = new DirectoryInfo(path);
    treeView.Nodes.Add(CreateDirectoryNode(rootDirectoryInfo));
}

private TreeNode CreateDirectoryNode(DirectoryInfo directoryInfo)
{
    var directoryNode = new TreeNode(directoryInfo.Name);
    foreach (var directory in directoryInfo.GetDirectories())
    {
        if (!directory.Name.Contains("_") 
             && !directory.Name.Contains("Word Versions") 
             && !directory.Name.Contains("Visio Flowcharts"))
        {
            var dirFileCount = directory.EnumerateFiles(
                         "*.pdf", SearchOption.AllDirectories).Count();
            dirFileCount += directory.EnumerateFiles(
                         "*.xls", SearchOption.AllDirectories).Count();
            dirFileCount += directory.EnumerateFiles(
                         "*.doc", SearchOption.AllDirectories).Count();
            dirFileCount …
Run Code Online (Sandbox Code Playgroud)

c# directory treeview file

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