我真的不明白First与FirstOrDefault的目的.我的意思是,我理解功能上的差异.但我真的"得到"为什么微软认为应该有两种不同的方法呢?有人知道吗?
我正在将C++应用程序转换为C#,我在代码库中的许多地方遇到过这一行代码:
Application->ProcessMessages()
Run Code Online (Sandbox Code Playgroud)
我找到了这个链接:http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/Forms_TApplication_ProcessMessages.html
其中说ProcessMessages()的如下:
调用ProcessMessages以允许应用程序处理当前在消息队列中的消息.ProcessMessages循环Windows消息循环,直到它为空,然后将控制权返回给应用程序.
但什么是"消息",什么是"消息队列"?如何添加消息?进行了哪种处理?
我似乎无法找到任何具体的解释,这是什么,这很重要,因为我不知道这个方法调用的C#/ .NET等价物,或者它是某种形状或方式的功能烘焙到.NET,我不需要做任何事情?
使用C#标记了问题,因为我对它的.NET等价物最感兴趣,但该线程的真正意图仅仅是了解C++的作用.
我有一个包含多达 19,000个条目的集合,我在foreach语句中迭代.在foreach的开头,我检查字符串是否包含2个单词中的1个和布尔值,然后我继续或执行更多操作.
foreach (SvnStatusEventArgs e in results) //results being my Collection
{
if ((e.Path.Contains("bin") ||
e.Path.Contains("obj")) && !includeBinObjFolders)
continue;
//Do a bunch of things
}
Run Code Online (Sandbox Code Playgroud)
我不确定计算机是否会检查字符串中的"bin"或"obj",然后检查布尔值,也许它会意识到字符串包含这两个"关键字"中的一个并不重要.
基本上我猜我所说的是以下会花费不同的时间来运行吗?
foreach (SvnStatusEventArgs e in results) //results being my Collection
{
if (!includeBinObjFolders &&
(e.Path.Contains("bin") ||
e.Path.Contains("obj")
)
)
continue;
//Do a bunch of things
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我听到一个声音在我脑后告诉我它首先评估最右边的表达,然后继续前进.如果是这样,第一个应该更有效率吗?我没有一种简单的方法来测试大于~200个文件的集合,所以简单地使用计时器会产生如此接近的结果我无法确认一种方法是否更好.
坦率地说,我认为最终用户最多不会在此集合中遇到500多条数据,但理论上可能会因用户错误而发生.
编辑谢谢大家.我在发布之前尝试过搜索,但是我忘记了关于逻辑的"短路"这个术语,所以我很难找到与我的罗嗦标题相关的答案.
编辑2实际上我只是去创建了一个小型控制台应用程序,它有一个2 for循环,每次迭代20,000次.一个先测试了Contains,另一个先测试了Bool.重复这两个循环10次,看起来布尔值首先平均每20K迭代半毫秒.首先评估的Contains每20K迭代大约需要3毫秒.确实有点小差异!
我知道当找不到参数时IndexOf返回-1,但这对我没有意义.
我有这个代码迭代我的表单上的所有DevExpress复选框,检查他们的标签是什么,并尝试在传递给该方法的"filter"参数中找到它.如果在过滤器中找到标签,则应检查该复选框.它始终等同于虚假.
public void FilterChanged(Control.ControlCollection controls, string filter)
{
filter = filter.Replace("[", String.Empty);
filter = filter.Replace("]", String.Empty);
foreach (Control control in controls)
{
if (control is CheckEdit && control.Tag != null)
{
var c = (CheckEdit)control;
var cFilter = c.Tag.ToString();
cFilter = cFilter.Replace("(", String.Empty);
cFilter = cFilter.Replace(")", String.Empty);
if (filter.ToUpper().IndexOf(c.Tag.ToString().ToUpper()) >= 0)
c.Checked = true;
else
c.Checked = false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在内部IF语句中设置了一个断点,在我的立即窗口中我输入了以下内容:
filter.ToUpper().IndexOf(c.Tag.ToString().ToUpper()) = -1
filter.ToUpper() ="文件不喜欢'%VERSIONINFO.CS%'"
cFilter.ToUpper() ="文件不喜欢'%VERSIONINFO.CS%'"
那些看起来几乎完全相同,所以不应该返回0吗?
我不能使用equals,因为过滤器可能包含多个子句,因此不相等.
工作中的这个项目在某些方法中有这个代码:
Dim pDataTable As DataTable
Dim pDS As DataSet
pDS = someClass.GetSomeDataSet()
If (pDS.Tables.Count > 0) Then
pDataTable = pDS.Tables("SomeTableName")
foo(pDataTable)
EndIf
If (pDataTable IsNot Nothing) Then
pDataTable.Dispose()
EndIf
pDataTable = Nothing
Run Code Online (Sandbox Code Playgroud)
只是好奇,但为什么会If (pDataTable IsNot Nothing) Then引起这个警告:
变量'pDataTable'在赋值之前使用.在运行时可能会导致空引用异常.
我完全理解它告诉我的是什么.如果我只是调用pDataTable.Dispose()它并且它从未在第一个if块中实例化,那么我的应用程序将会爆炸.但是为什么它会产生一个警告,只是简单地将值与null进行比较?
如果我想摆脱这个警告,我应该只是更改声明pDataTable还要创建一个新实例DataTable吗?
我有一个方法可以根据 3 个正则表达式验证一个字段,并根据哪个表达式失败返回一个错误。
function mfpValidateValue()
{
var pCtrl = window.document.forms[0].txtValue;
var pStrValue = mTrim(pCtrl.value);
if (pStrValue == '')
return true;
var regexNum = new RegExp("^[0-9]{9}.{0,3}$"); // First 9 are numeric followed by up to any 3 characters
var regexLetter1 = new RegExp("^[A-Z]{1,3}[0-9]{6}$"); //Up to the first 3 are alpha, then there are exactly 6 numbers
var regexLetter2 = new RegExp("^[A-Z]{1,3}[0-9]{9}$"); //Up to the first 3 are alpha, then there are exactly 9 numbers
var error = "";
// If any …Run Code Online (Sandbox Code Playgroud) 我有一个功课问题,我需要进行一些验证.我得到了问题第一部分的正确答案.然而,问题的第二部分并没有那么顺利.我不确定我的计算是否已关闭或测试数据是否错误.(今年已经发生了几次).
我们假设设计一个控制台应用程序,它将解决偿还贷款需要多少个月的时间.
我不能使用任何我还没有学过的代码; 只是基本代码.(没有循环,数组等)
公式为:N = - (1/30)*ln(1 + b/p(1-(1 + i)^ 30))/ ln(1 + i)
n =几个月
ln =日志功能
b =信用卡余额
p =每月付款
i =每日利率(年利率/ 365)
问题1的测试数据:
信用卡余额:5000美元
每月付款:200美元
年率:0.28
我的回答:38个月
问题2的测试数据:
信用卡余额:7500美元
每月付款:125美元
年费率:0.22
无法得到答案
我的解决方案
static void Main(string[] args)
{
decimal creditcardbalance, monthlypayment;
double calculation, months, annualpercentrate;
Console.WriteLine("Enter the credit card balance in dollars and cents: ");
creditcardbalance = decimal.Parse(Console.ReadLine());
Console.WriteLine("Enter the monthly payment amount in dollars and cents: ");
monthlypayment = decimal.Parse(Console.ReadLine()); …Run Code Online (Sandbox Code Playgroud) 我已经阅读了有关解决方案用户选项文件的MSDN文章
解决方案用户选项文件用于存储用户首选项设置,并在Visual Studio保存解决方案时自动创建。
但是什么样的设置或信息被认为是“用户首选项设置”?我从另一家公司收到的我的解决方案文件中有一个奇怪的问题,唯一的解决方法似乎是在问题出现时定期删除* .suo。虽然无法弄清楚实际上存储了哪种信息。我知道这并不重要,但我仍然想知道,但似乎找不到答案。
我看了这个问题:
但它没有帮助.
我有以下代码:
if (_modeID != 8 && _modeID != 9)
// do something
Run Code Online (Sandbox Code Playgroud)
_modeID 在一个单独的文件中定义并分配一个值.
我遇到了一个错误,由于某种原因,var _modeID = someIntVal;它永远不会执行,所以当if上面的语句运行时根本就没有_modeID.
我将它扩展为if (_modeID === null || _modeID === undefined || (_modeID != 8 && _modeID != 9)但仍会引发以下错误:
ReferenceError - Java脚本错误:'_modeID'未定义
我希望在这种情况下,第一个或第二个条件会评估为真,但显然不是.谁能解释我做错了什么?
var _modeID = undefined; if (_modeID === undefined) ...简单地if (_modeID === undefined) ...假设这两个片段是"完整"文件是不一样的?
我只是在工作中用C#重写一个旧的C++应用程序,所以我觉得我会乱搞并尝试学习新的东西,而实际工作很慢.我认为这有点多余并且违背了IF/ELSE声明的目的,但是可以这样做吗?
public static bool IsAlpha(string s, bool allowSpaces)
{
foreach (char c in s)
{
if (!(allowSpaces) ? (char.IsLetter(c) || c.Equals(' ')) : char.IsLetter(c))
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
基本上我只是想缩短它;
alpha = (allowSpaces) ? (char.IsLetter(c) || c.Equals(' ')) : char.IsLetter(c);
if (!alpha)
return false;
Run Code Online (Sandbox Code Playgroud)
如果我调用IsAlpha("abcd", false)该方法似乎总是返回false.我不确定我在三元语句中是否存在逻辑错误,或者我正在尝试做的事情是不可能的.基本上只是想知道是否有可能使IF语句根据allowSpaces值来评估两个表达式中的一个.但相反,我认为它只是评估if (!allowSpace)并在那里返回虚假.