例:
Open "C:\...\someFile.txt" For Output As #1
Print #1, someString
Close #1
Run Code Online (Sandbox Code Playgroud)
如果someString包含非ASCII字符,它们如何编码?(UTF-8,Latin-1,一些代码页取决于Windows语言环境,...)
在我的系统上,上面的代码似乎使用的是Windows-1252,但由于Open语句的文档和Print#语句的文档都没有提到字符串编码,我无法确定这是否是某些内置默认值或某些系统设置,我正在寻找一个明确的答案.
注意:感谢大家建议如何使用特定编码创建文件的替代方法(ADODB.Stream,Scripting.FileSystemObject等) - 感谢他们.然而,这个问题是关于理解遗留代码的确切行为,所以我只对上面引用的代码的行为感兴趣.
我有一个IEnumerable<string>被传递给我,其中包含以下内容:
现在我想要实现的是按字母顺序排序项目,但我想保持other项目最后.我已经开始使用了OrderBy(i => i)
列出如下项目:
我想要的结果是
我尝试过使用,.OrderBy(i => i != "Other").ThenBy(i => i)但这会把Other项目放在顶部.
有人可以告诉我如何实现这一目标.
显然,VB的XML文字中的CR-LF组合被静默地转换为LF.
请考虑以下最小示例:
Module Module1
Sub Main()
Dim x As XElement = <xml>1
2</xml>
' Print Bytes
Console.WriteLine(String.Join("-", x.Value.Select(Function(c) AscW(c).ToString("X2"))))
End Sub
End Module
Run Code Online (Sandbox Code Playgroud)
使用Visual Studio 2017(Framework 4.5.2)编译,这会产生
31-0A-32
Run Code Online (Sandbox Code Playgroud)
而不是
31-0D-0A-32
Run Code Online (Sandbox Code Playgroud)
正如我所料.我用二进制编辑器检查了源文件,它肯定包含xml文字中1到2之间的CR-LF(0D-0A).
这是官方记录的行为还是我的编译器的一些实现细节,我不能依赖它?如果是前者,它在哪里记录?
我知道我可以通过串联其他常量字符串来创建新的常量字符串:
const string a = "A";
const string ab = a + "B";
Run Code Online (Sandbox Code Playgroud)
是否可以基于常量int创建常量字符串?例如,以下内容不会编译:
const int Dpi = 300;
const string DeviceInfo = "<DeviceInfo><Dpi>" + Dpi + "</Dpi></DeviceInfo>";
Run Code Online (Sandbox Code Playgroud)
分配给MyClass.DeviceInfo的表达式必须是常量。
我知道我可以解决这个问题
Dpi一个字符串而不是一个int(并int.Parse在需要int值时添加它),DpiString(因此违反了DRY),或DeviceInfo一个static readonly字段而不是一个const字段。我将选择选项3,但是出于好奇,我想知道是否还有其他选项我错过了...
.Net是否有常见数字的内置常量,如百万,十亿等?
编辑:正如所建议的那样,这是出于可读性的原因,而不是写1000000或1000000000.我知道我可以创建自己的,只是想在我这样做之前检查它们是否已经存在.
OLEDB 可用于读取和写入 Excel 工作表。考虑以下代码示例:
using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\my\\excel\\file.xls;Extended Properties='Excel 8.0;HDR=Yes'")) {
conn.Open();
OleDbCommand cmd = new OleDbCommand("CREATE TABLE [Sheet1] ([Column1] datetime)", conn);
cmd.ExecuteNonQuery();
cmd = new OleDbCommand("INSERT INTO Sheet1 VALUES (@mydate)", conn);
cmd.Parameters.AddWithValue("@mydate", DateTime.Now.Date);
cmd.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)
这工作得很好。插入数字、文本等也效果很好。但是,插入带有时间分量的值会失败:
using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\my\\excel\\file.xls;Extended Properties='Excel 8.0;HDR=Yes'")) {
conn.Open();
OleDbCommand cmd = new OleDbCommand("CREATE TABLE [Sheet1] ([Column1] datetime)", conn);
cmd.ExecuteNonQuery();
cmd = new OleDbCommand("INSERT INTO Sheet1 VALUES (@mydate)", conn);
cmd.Parameters.AddWithValue("@mydate", DateTime.Now); // <-- note the difference …Run Code Online (Sandbox Code Playgroud) 我想保存名称中包含丹麦字符的文件,例如"Helloæ".
保存文件名的字符串具有以下值: Helloæ
如何让它转换æ成æ?这个问题不只是关于"æ"字符,而是关于所有其他可能的字母.
我们正在从SQL Server 2008迁移到SQL Server 2014.我搜索了Microsoft文档,但我可以发誓这个
select * from table (nolock)
Run Code Online (Sandbox Code Playgroud)
将是一个无效的语法,并将WITH被要求.
但是,我似乎无法在文档中找到它并且我在2014年的实例上测试它没有问题.
忽略整个"NOLOCKs很糟糕"的事情,我完全错误地记住了这个或者语法上的这种改变被删除了吗?
你能告诉我哪一个列表连接方法更有效,为什么?还是性能相同?有没有其他方法来处理这种情况(基于字段属性加入2个列表)?
我的代码:
public List<CombinedDatabaseStructure> Combine1(List<DatabaseStructure1> _Data1, List<DatabaseStructure2> _Data2)
{
List<CombinedDatabaseStructure> combinedAll = new List<CombinedDatabaseStructure>();
foreach (var row1 in _Data1)
{
foreach (var row2 in _Data2)
{
CombinedDatabaseStructure combined = new CombinedDatabaseStructure();
if (row1.ID == row2.ID)
{
combined.DatabaseStructure1 = row1;
combined.DatabaseStructure2 = row2;
combinedAll.Add(combined);
}
}
}
return combinedAll;
}
Run Code Online (Sandbox Code Playgroud)
代码2:
public List<CombinedDatabaseStructure> Combine2(List<DatabaseStructure1> _Data1, List<DatabaseStructure2> _Data2)
{
var joined = from item1 in _Data1.AsEnumerable()
join item2 in _Data2.AsEnumerable() on item1.ID equals item2.ID
select new CombinedDatabaseStructure (item1,item2);
return joined.ToList<CombinedDatabaseStructure>();
}
Run Code Online (Sandbox Code Playgroud) 前一段时间,Visual Studio 2019告诉我,``输出''窗口导致Visual Studio的启动延迟为X秒,并让我在启动时隐藏了该窗口。
我接受了这个提议,现在,过了一段时间,我发现必须在每个Visual Studio会话中一次重新固定“输出”窗口是一件令人讨厌的事情,并且我希望将事情恢复到以前的样子。
我浏览了Visual Studio选项(特别是“环境” /“启动”和“环境” /“选项卡和Windows”),但没有找到撤消该更改的选项。我错过了什么?
我知道我可以将Visual Studio重置为默认设置,但是我想避免这种情况,因为那样我会丢失所有的自定义设置。(除非给出答案也证明没有其他选择,否则将不会提供任何暗示建议。)
我也知道我可以固定输出窗口,然后将布局“保存”为自定义布局。我不需要,我想修改启动时加载的“默认”布局。