这是一些简单的代码:
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) 以下代码给出了关于IEnumerable可能多次枚举的警告:
public ClassName(IEnumerable<OtherClassName> models) : base(models)
{
_models.AddRange(models);
}
Run Code Online (Sandbox Code Playgroud)
由于"基本"调用,删除此警告的常规解决方案不起作用.我无法转换为列表,因为没有地方存储该列表.
我唯一的选择是让构造函数将列表作为参数吗?在这种情况下,这是推荐的做法吗?
我有一个包含三列的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)
谢谢!
下面是我的代码,我不能为我的生活解决查询有什么问题.
我最初有错误"没有给出一个或多个参数的值",这似乎已经消失了(虽然我甚至不知道为什么我得到它).
在此代码之前打开连接.参数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:我删除了额外的东西,所以帖子只涉及原始问题,已被回答.我会为我奇怪的"没有给定值"错误提出一个新问题
我已经编写了一些相当快速的代码,并且自从将其更改为"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)