在XML的世界中,最好在文件中留下空白元素:
<widgets>
<widget>
<id>5</id>
<name>Bob</name>
<price>5.33</price>
<otherInfo>Bob is a ball.</otherInfo>
<dateAdded>9-5-2010</dateAdded>
</widget>
<widget>
<id>3</id>
<name>Mary</name>
<price>4.67</price>
<otherInfo></otherInfo>
<dateAdded>10-1-2010</dateAdded>
</widget>
</widgets>
Run Code Online (Sandbox Code Playgroud)
或删除它们:
<widgets>
<widget>
<id>5</id>
<name>Bob</name>
<price>5.33</price>
<otherInfo>Bob is a ball.</otherInfo>
<dateAdded>9-5-2010</dateAdded>
</widget>
<widget>
<id>3</id>
<name>Mary</name>
<price>4.67</price>
<dateAdded>10-1-2010</dateAdded>
</widget>
</widgets>
Run Code Online (Sandbox Code Playgroud)
对于解析,如果它们在那里会更容易,因为在尝试获取它之前不需要检查元素是否存在.另一方面,XML文件不会出现空白元素.
最佳实践是否规定了一种存储形式与另一种存储形式,或者它取决于存储的数据?
我在我的网站上有一个动作:
http://mysite.com/User/Logout
Run Code Online (Sandbox Code Playgroud)
这将使当前用户退出他/她的会话.由于这是一个简单的GET请求,恶意用户可以创建指向此页面的链接,甚至可以将此链接放在图像的src属性中,这会强制用户注销.我仍然希望保持注销链接的简单性而不必走得太远,但同时我希望能够防止上述情况发生.
有任何想法吗?
我有一个结构:
public struct MyStruct
{
public readonly string Str1;
public readonly string Str2;
}
Run Code Online (Sandbox Code Playgroud)
根据互联网,你真的应该只使用结构,如果它们的大小是16字节或更少.如果更多,可能会出现性能问题.从各种搜索中,字符串每个字符存储2个字节.这意味着如果结构中有一个字符串,它最多只能包含8个字符,假设它是结构中唯一的字符串.在我的例子中,这将在我拥有的两个领域中分开.
但是,在其他地方,我读过只有字符串引用放在结构中,而不是字符串本身.
我的问题是:C#结构的16字节推荐/限制是否意味着我基本上不能在其中使用字符串.我喜欢有时利用结构(特别是它不能为空的部分),所以我想知道在遵循建议时是否还有一种方法可以使用它们.
编辑:我的选择不好.实际上,它不是语言的限制,而是基于性能的推荐,在一个结构中不超过16个字节.我认为我在这里成为过早优化的牺牲品:如果我在应用程序中看到实际的性能问题,而不是在少量字节上烦恼,也许我应该只担心这个限制.
csproj作为一名开发人员,我希望我的编译器(在本例中为 Visual Studio 中的 MSBuild)在任何项目中包含磁盘上丢失的文件时都会严重失败。在目睹了网站上的 web.config 被意外删除后,我萌生了这个想法。MSBuild 很乐意在没有它的情况下进行编译(并且在持续集成中也会这样做,因为它也只运行 MSBuild)。
有没有办法强制 MSBuild 在构建成功之前检查所有解决方案项目中引用的所有文件是否都存在?启用警告作为错误似乎不起作用。事实上,查看输出时,我没有看到任何文件丢失的通知。我知道它会标记标记为“编译”的项目文件丢失的文件,但是仅内容的项目文件又如何呢?
我正在尝试模拟我可以在Ninject中配置的行为,而只使用Unity.
我正在尝试使用Cached Repository Pattern,给定以下类和接口:
public interface IRepository<T>
{
T Get();
}
public class SqlRepository<T> : IRepository<T>
where T : new()
{
public T Get()
{
Console.WriteLine("Getting object of type '{0}'!", typeof(T).Name);
return new T();
}
}
public class CachedRepository<T> : IRepository<T>
where T : class
{
private readonly IRepository<T> repository;
public CachedRepository(IRepository<T> repository)
{
this.repository = repository;
}
private T cachedObject;
public T Get()
{
if (cachedObject == null)
{
cachedObject = repository.Get();
}
else
{
Console.WriteLine("Using cached repository to …Run Code Online (Sandbox Code Playgroud) 我玩弄async和await在C#中的一个简单的小控制台应用程序。我的目标很简单:以异步方式处理文件列表,这样一个文件的处理就不会阻止其他文件的处理。这些文件都不依赖于另一个文件,并且有(要说)成千上万个文件要经过。
这是我目前拥有的代码。
public class MyClass
{
public void Go()
{
string[] fileSystemEntries = Directory.GetFileSystemEntries(@"Path\To\Files");
Console.WriteLine("Starting to read from files!");
foreach (var filePath in fileSystemEntries.OrderBy(s => s))
{
Task task = new Task(() => DoStuff(filePath));
task.Start();
task.Wait();
}
}
private async void DoStuff(string filePath)
{
await Task.Run(() =>
{
Thread.Sleep(1000);
string fileName = Path.GetFileName(filePath);
string firstLineOfFile = File.ReadLines(filePath).First();
Console.WriteLine("{0}: {1}", fileName, firstLineOfFile);
});
}
}
Run Code Online (Sandbox Code Playgroud)
我的Main()方法只是调用此类:
public static class Program
{
public static void Main() …Run Code Online (Sandbox Code Playgroud) 在C#中,有一个Exception类.出于测试目的,我希望能够将其StackTrace属性设置为任意字符串.StackTrace没有setter,所以我的第一次尝试是尝试使用反射:
Exception instance = new Exception("Testing");
PropertyInfo propertyInfo = typeof(Exception).GetProperty("StackTrace");
propertyInfo.SetValue(instance, "Sample StackTrace value", null);
Run Code Online (Sandbox Code Playgroud)
这会产生运行时错误:
System.ArgumentException : Property set method not found.
有什么办法可以设置StackTrace房产吗?更一般地说,有没有办法设置一个缺乏setter的属性?
c# ×5
.net ×1
async-await ×1
asynchronous ×1
csrf ×1
generics ×1
msbuild ×1
ninject ×1
php ×1
reflection ×1
security ×1
string ×1
struct ×1
xml ×1
xss ×1