我有以下LINQ查询,当FirstOrDefault()
返回null 时触发和异常.理想情况下,我想避免空检查.有没有办法做到这一点?0
如果没有CPOffsets
满足FirstOrDefault()
电话的话我想回来.
double offset = OrderedOffsets.FirstOrDefault(o => o.OffsetDateTime > cpTime).CPOffset;
Run Code Online (Sandbox Code Playgroud)
我能看到实现这一目标的唯一方法如下:
CPOffset cpOffset = OrderedOffsets.FirstOrDefault(o => o.OffsetDateTime > cpTime);
double offset = cpOffset != null ? cpOffset.CPOffset : 0;
Run Code Online (Sandbox Code Playgroud)
还有另一种更简洁的方法吗?使用Select()
后FirstorDefault()
不编译,但我认为可能适合这里?
可能重复:
Delphi中是否存在或者是否存在条件运算符?
我知道Delphi没有C#中的三元运算符.即?:
那么如何最好地表示这个函数调用?什么是最干净的方法?
如果有任何代码可以使用INSTEAD编写单独的函数,那将是非常好的吗?如果没有,那么最有效和/或最干净的代码表示是什么?
我有一个名为IDataIO的界面:
public interface IDataIO
{
event DataReceivedEvent DataReceived;
//.....more events,methods and properties
}
Run Code Online (Sandbox Code Playgroud)
我也有一个实现此接口,即多个类UdpIO
,TcpIO
,SerialIO
.
现在,我有一个IO
类允许我在不同的输入/输出硬件之间切换.这个类的每个实例都有一个CurrentIODevice
属性,它可以是一个SerialIO
,UdpIO
或TcpIO
.分配此属性后,我会附加一个或多个处理程序,DataReceivedEvent
以便在收到传入数据时通知我的GUI,以及需要通知的其他类.
public class IO
{
IDataIO CurrentIODevice;
public IO()
{
SerialIO serial = new SerialIO();
TcpIO tcp = new TcpIO();
UdpIO udp = new UdpIO();
CurrentIODevice = serial;
}
}
Run Code Online (Sandbox Code Playgroud)
我还有一个IOManager
包含多个IO
对象的类.
public class IOManager
{
List<IO> Ports = new List<IO>();
public IOManager()
{
Ports.Add(new …
Run Code Online (Sandbox Code Playgroud) 将文件名参数传递给过程/函数时,我应该使用TFilename
或String
.
如果存在差异,那么它是什么,以及如果使用String
?那么潜在的后果是什么?
例如
procedure TForm1.OpenFile(const AFilename : String);
begin
//Open the file if it exists
...
end;
Run Code Online (Sandbox Code Playgroud) 我有一个在发生异常时调用的方法:
public void ErrorDBConcurrency(DBConcurrencyException e)
{
MessageBox.Show("You must refresh the datasource");
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是将此函数传递给方法,因此如果用户单击是,则调用该方法,例如
public void ErrorDBConcurrency(DBConcurrencyException e, something Method)
{
if (MessageBox.Show("You must refresh the datasource") == DialogResult.OK)
Method();
}
Run Code Online (Sandbox Code Playgroud)
方法可能有也可能没有参数,如果是这种情况我也想传递它们.
我怎么能做到这一点?
首先道歉,因为这个网站上有类似的问题,但没有一个直接回答这个问题.
我在VS 2010中使用了类型化数据集.我在数据集中创建一个TableAdapter,其查询类似于:
SELECT * from Table WHERE ID IN(@IDs)
Run Code Online (Sandbox Code Playgroud)
现在,如果我调用:TableAdapter.Fill(MyDataTable,"1,2,3")
发生错误,说明VS无法将1,2,3转换为int类型.很公平.
那么我决定将参数(即@IDs)类型更改为参数集合中的字符串.再试一次 - 仍然是相同的错误消息.
那么这种类型的数据集是否可以接受我的"1,2,3"参数?目前我只有一些参数可以通过,所以我可以很容易地创建5个左右的参数并单独传递它们,但是如果有数百个呢?有没有办法Fill()
用逗号分隔参数调用方法?
(我知道我可以使用动态SQL来创建语句并执行它但更喜欢是否有另一种方式允许我保留我的类型化数据集以用于例如ReportViewer/bindingsources)
我需要将浮点数格式化为x个字符(在我的情况下为6,包括小数点).我的输出还需要包含数字的符号
所以给定输入,这是预期的输出
1.23456 => +1.2345
-12.34567 => -12.345
-0.123456 => -0.1234
1234.567 => +1234.5
Run Code Online (Sandbox Code Playgroud)
请假设在最后一个字符之前总是有一个小数位.即没有 12345.6
数字输入 - 输入将始终小于或等于9999.9
.
我想这必须有条件地完成.
好吧,所以我已经在Delphi中编程了3到3年了,并认为自己是一个对概念有充分理解的中级应用程序设计师.但我怎样才能变得更好?我一直在寻找我经常使用的几个组件的来源(virtualtreeview,asynccalls),那里的代码只是让我感到困惑.是的,我可以理解它的一部分,但其他的事情就在我的头上.
那么哪些是提高编程能力的最佳资源呢?书籍,博客或其他信息来源?
我试图在客户端计算机上安装我的Outlook Addin.
不幸的是,加载项永远不会被"启用"它始终显示在"已禁用"加载项部分中.
是否有关于如何创建正确的安装应用程序并安装Outlook插件的简单分步指南?
编辑:
好的,我已经回到基础,但我仍然无法正确安装它.
我使用VS2010项目向导创建一个新的Outlook Addin.
它生成文件等,然后我改变我的代码,如下所示:
namespace OutlookAddIn1
{
public partial class ThisAddIn
{
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
MessageBox.Show("Worked");
}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
}
#region VSTO generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InternalStartup()
{
this.Startup += new System.EventHandler(ThisAddIn_Startup);
this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
}
#endregion
}
Run Code Online (Sandbox Code Playgroud)
如果我安装这个,我收到相同的错误消息:
Not Loaded. …
Run Code Online (Sandbox Code Playgroud) 我最近一直在阅读有关IObservable的内容.到目前为止,我已经查看了各种SO问题,并观看了他们可以做什么的视频.我正在思考的整个"推动"机制非常棒,但我仍在努力弄清楚究竟是什么.从我的读数来看,我认为某种方式IObservable
可以被"观察",并且IObservers
是"观察者".
所以现在我要尝试在我的应用程序中实现它.在我开始之前,有一些事情我想坚持下去.我已经看到IObservable与IEnumerable相反,但是,我无法在我的特定实例中看到任何可以合并到我的应用程序中的地方.
目前,我大量使用事件,以至于我可以看到"管道"开始变得无法管理.我想,IObservable可以帮助我.
考虑以下设计,这是我的应用程序中的I/O包装(仅供参考,我通常需要处理字符串):
我有一个基本接口叫IDataIO
:
public interface IDataIO
{
event OnDataReceived;
event OnTimeout:
event OnTransmit;
}
Run Code Online (Sandbox Code Playgroud)
现在,我目前有三个实现此接口的类,这些类中的每一个都以某种方式利用异步方法调用,引入了某种类型的多线程处理:
public class SerialIO : IDataIO;
public class UdpIO : IDataIO;
public class TcpIO : IDataIO;
Run Code Online (Sandbox Code Playgroud)
每个类的一个实例都包含在我的最终类中,称为IO(它也实现了IDataIO - 遵循我的策略模式):
public class IO : IDataIO
{
public SerialIO Serial;
public UdpIO Udp;
public TcpIO Tcp;
}
Run Code Online (Sandbox Code Playgroud)
我已经利用策略模式来封装这三个类,这样当IDataIO
在运行时在不同实例之间进行更改时,它会对最终用户"隐藏".你可以想象,这导致了背景中的"事件管道".
那么,我如何在我的案例中使用"推送"通知?我想简单地将数据推送给任何感兴趣的人,而不是订阅事件(DataReceived等).我有点不确定从哪里开始.我还在尝试用它的想法/泛型类Subject
以及它的各种形式(ReplaySubject/AsynSubject/BehaviourSubject).有人可以请教我这个(也许参考我的设计)?或者这根本不适合IObservable
?
PS.随意纠正我的任何"误解":)