让我首先道歉,如果这个问题听起来对你们中的经验丰富的程序员来说可能听起来很业余,那就是我在工作中一直有很多关于这方面的争论,所以我真的想要直截了当,这就是为什么我依赖在stackoverflow社区,一劳永逸地解决这个问题:)
所以,一方面根据MSDN,我们有:
TextWriter类
表示可以编写一系列连续字符的编写器.这个类是抽象的.
FileStream类
在文件周围显示Stream,支持同步和异步读写操作.
StreamWriter类
实现TextWriter,以便以特定编码将字符写入流中.
另一方面,很明显它们都属于System.IO但是考虑到MSDN示例混合其中的一些,我仍然没有达到非常期望的a-ha时刻.
任何评论都会超过赞赏,非常感谢!
关于恢复WinForm位置和大小的许多帖子.
例子:
但我还没有找到使用多个监视器执行此操作的代码.
也就是说,如果我使用监视器2上的窗口关闭我的.NET Winform应用程序,我希望它将窗口大小,位置和状态保存到应用程序设置,以便以后可以在我重新启动应用程序时恢复到监视器2.如果在上面的代码项目示例中它包含一些健全性检查,那将是很好的,因为如果保存的位置大部分是在屏幕外,它"修复"它.或者如果保存的位置在不再存在的显示器上(例如我的笔记本电脑现在没有我的第二台显示器),那么它会正确地将其移动到显示器1.
有什么想法吗?
我的环境:C#,.NET 3.5或更低版本,VS2008
我有一个存储过程执行一些参数验证,如果参数无效,应该失败并停止执行.
我的第一个错误检查方法如下所示:
create proc spBaz
(
@fooInt int = 0,
@fooString varchar(10) = null,
@barInt int = 0,
@barString varchar(10) = null
)
as
begin
if (@fooInt = 0 and (@fooString is null or @fooString = ''))
raiserror('invalid parameter: foo', 18, 0)
if (@barInt = 0 and (@barString is null or @barString = ''))
raiserror('invalid parameter: bar', 18, 0)
print 'validation succeeded'
-- do some work
end
Run Code Online (Sandbox Code Playgroud)
由于严重性18不会停止执行并且"验证成功"与错误消息一起打印,因此这不起作用.
我知道我可以在每次raiserror之后添加一个返回但这对我来说看起来很难看:
if (@fooInt = 0 and (@fooString is null or @fooString = …Run Code Online (Sandbox Code Playgroud) 我有很多关于给定ID的开始和停止时间的数据,我需要将所有相交和相邻的时间平移为一个组合的时间跨度.下面发布的样本数据都是相同的ID,所以我没有列出它.
为了使事情更清楚,请查看03.06.2009的示例数据:
以下时间跨度是重叠或连续的,需要合并为一个时间跨度
由此产生的时间跨度为05:54:48至10:00:13.由于在10:00:13和10:12:50之间存在差距,我们还有以下时间间隔:
这导致从10:12:50到14:02:31的一个合并时间跨度,因为它们是重叠或相邻的.
您将在下面找到我需要的示例数据和展平数据.持续时间列只是提供信息.
任何解决方案 - 无论是SQL还是非 - 都表示赞赏.
编辑:由于有很多不同的和有趣的解决方案,我正在通过添加约束来查看"最佳"(如果有)解决方案泡沫,从而完善我的原始问题:
在这些限制范围内,最佳解决方案是什么?我担心大多数解决方案都会非常慢,因为他们加入了日期和时间的组合,这在我的案例中不是索引字段.
你会在客户端或服务器端进行所有合并吗?您是否首先创建一个优化的临时表并使用该表提出的解决方案之一?到目前为止我没有时间测试解决方案,但我会告诉您最适合我的方法.
样本数据:
Date | Start | Stop
-----------+----------+---------
02.06.2009 | 05:55:28 | 09:58:27
02.06.2009 | 10:15:19 | 13:58:24
02.06.2009 | 13:58:24 | 13:58:43
03.06.2009 | …Run Code Online (Sandbox Code Playgroud) 我有一个List<T>并希望以相反的顺序返回值.我不想要的是反转列表本身.
这似乎没有任何问题,因为有一个Reverse()扩展方法IEnumerable<T>正是我想要的.
我的问题是,还有一种Reverse()方法List<T>可以反转列表本身并返回void.
我知道有很多方法以相反的顺序遍历列表,但我的问题是:
如何告诉编译器我想使用具有相同名称的扩展方法?
var list = new List<int>(new [] {1, 2, 3});
DumpList(list.Reverse()); // error
Run Code Online (Sandbox Code Playgroud) 我做了一些浮点计算测试,以最大限度地减少精度损失.我偶然发现了一个我要在这里展示的现象,并希望得到一个解释.
当我写作
print 1.0 / (1.0 / 60.0)
Run Code Online (Sandbox Code Playgroud)
结果是
60.0024000960
Run Code Online (Sandbox Code Playgroud)
当我写相同的公式并进行显式转换时 float
print cast(1.0 as float) / (cast(1.0 as float) / cast(60.0 as float))
Run Code Online (Sandbox Code Playgroud)
结果是
60
Run Code Online (Sandbox Code Playgroud)
到目前为止,我认为带小数位的数字文字会自动被视为float具有适当精度的值.转换为real显示与转换相同的结果float.
float获得更好的精度(这对我来说听起来很讽刺:)?我有很多字符串包含许多不同拼写的文本.我通过搜索关键字来标记这些字符串,如果找到关键字,我会使用该关键字的关联文本.
假设搜索字符串可以包含文本"schw.","schwa".和"施瓦茨".我有三个关键字都解析为"schwarz"文本.
现在我正在寻找一种有效的方法来查找所有关键字,而无需执行string.Contains(关键字)为每个关键字.
样本数据:
H-Fuss ahorn 15 cm/SH48cm
Metall-Fuss chrom 9 cm/SH42cm
Metall-Kufe alufbg.12 cm/SH45c
Metall-Kufe verchr.12 cm/SH45c
Metall-Zylind.aluf.12cm/SH45cm
Kufe alufarbig
Metall-Zylinder hoch alufarbig
Kunststoffgl.schw. - hoch
Kunststoffgl.schw. - Standard
Kunststoffgleiter - schwarz für Sitzhoehe 42 cm
Run Code Online (Sandbox Code Playgroud)
示例关键字(键,值):
h-fuss, Holz
ahorn, Ahorn
metall, Metall
chrom, Chrom
verchr, Chrom
alum, Aluminium
aluf, Aluminium
kufe, Kufe
zylind, Zylinder
hoch, Hoch
kunststoffgl, Gleiter
gleiter, Gleiter
schwarz, Schwarz
schw., Schwarz
Run Code Online (Sandbox Code Playgroud)
样本结果:
Holz, Ahorn
Metall, Chrom
Metall, Kufe, Aluminium
Metall, Kufe, Chrom
Metall, Zylinder, Aluminium …Run Code Online (Sandbox Code Playgroud) 我经常发现自己写作...... 像这样:
if (condition)
{
yield return whatever;
yield break;
}
Run Code Online (Sandbox Code Playgroud)
我发现必须为标准范例"返回一个值和退出方法"使用两个yield语句非常冗长.我知道我可以,return new List<type>() { whatever };但这会破坏在方法的其余部分使用yield的好处.
是否有更优雅的方法来获取yield return值并退出方法?
所以我有一个小的C#应用程序需要定期检查网络上多台机器上的目录内容.我以为我只能读取\ hostname\C $作为目录路径,但是使用普通的Directory类似乎没有办法对其他服务器进行身份验证,因此您可以访问隐藏的共享.我确信有一个简单的方法可以做到这一点,我忽略了,但此刻我有点难过.
我遇到了LINQ to SQL的一些特性.
使用相对简单的查询,我想选择一些字段,但将日期字段格式化为字符串,我首先这样做:
var list = dataContext.MyLists.Single(x => x.ID == myId);
var items = from i in list.MyItems
select
new
{
i.ID,
i.Sector,
i.Description,
CompleteDate = i.CompleteDate.HasValue ? i.CompleteDate.Value.ToShortDateString() : "",
DueDate = i.DueDate.HasValue ? i.DueDate.Value.ToShortDateString() : ""
};
Run Code Online (Sandbox Code Playgroud)
后来我尝试了以下查询,这是完全相同的,除了我直接从我的dataContext查询,而不是我的第一个查询中的一个元素:
var items = from i in dataContext.MyLists
select
new
{
i.ID,
i.Sector,
i.Description,
CompleteDate = i.CompleteDate.HasValue ? i.CompleteDate.Value.ToShortDateString() : "",
DueDate = i.DueDate.HasValue ? i.DueDate.Value.ToShortDateString() : ""
};
Run Code Online (Sandbox Code Playgroud)
第一个运行正常,但第二个查询产生一个:
无法将表达式"..."转换为SQL,并且无法将其视为本地表达式.
如果我删除格式化日期的行,它工作正常.如果我删除.HasValue检查它也可以正常工作,直到有空值.
有任何想法吗?
安东尼
c# ×7
.net ×2
algorithm ×2
sql ×2
sql-server ×2
.net-3.5 ×1
appsettings ×1
datetime ×1
fileshare ×1
io ×1
linq ×1
linq-to-sql ×1
precision ×1
winforms ×1
yield ×1
yield-return ×1