我一直在搞乱Mono中的T4支持,并注意到一件非常麻烦的事情.运行T4模板时的当前目录是主目录.我需要能够从当前项目的目录中读取一些文件,但我不知道如何.
<#@ template language="C#v3.5" #>
<#@ output extension="txt" #>
<#=System.IO.Directory.GetCurrentDirectory() #>
Run Code Online (Sandbox Code Playgroud)
产量
/home/earlz
Run Code Online (Sandbox Code Playgroud)
在哪里,我希望它产生类似的东西
/home/earlz/MyProject
Run Code Online (Sandbox Code Playgroud)
我该如何克服这个问题?
此外,我尝试了hostspecific和Host.ResolvePath,但我得到了一个NotImplementedException
我想在我的身份验证库中允许bcrypt支持.现在的问题之一是我认为哈希将是类型的HashAlgorithm.Bcrypt.net没有实现这个类.此外,它是密封的,所以我必须自己创建自己的分支并自己修改它.有没有更好的替代方案已经实现了HashAlgorithm?
我目前正在努力改造我们应用程序的数据系统.基本上,它的设计使人们可以添加他们想要的所有自定义字段,只有几个常量/总是在那里的字段.
我们目前的设计给我们带来了大量的维护问题.我们所做的是动态地(在运行时)为每个字段向数据库添加一列.我们必须有一个元表和其他残余来维护所有这些动态列.
现在我们正在研究EAV,但它似乎并没有好转.基本上,我们有许多不同类型的字段,因此会有一个StringValues,IntegerValues等表...这会让事情变得更糟.
我想知道在数据库中使用JSON或XML blob是否是更好的解决方案,特别是因为在大多数用例中,当我们从这些表中检索任何内容时,我们需要整行.问题是我们需要能够为这些数据创建报告.没有解决方案真正使自定义查询看起来很容易.在报告运行时,搜索这样的blob数据库肯定会成为一场性能噩梦.
每个"行"需要有大约15到100(可能更多)与之关联的属性/列.
我们正在使用SQL Server 2008,我们的应用程序与数据库连接是一个C#Web应用程序(因此,ASP.Net).
你怎么看?完全使用EAV或blob或其他东西?(另外,是的,我知道像MongoDB这样的无架构数据库在这里会很棒,但我不能说服我的老板使用它)
xml sql-server asp.net database-design entity-attribute-value
现在我早就知道并且习惯于在C#中使用这种行为,而且一般来说,我喜欢它.但有时编译器不够聪明.
我有一小段代码,现在我的解决方法不是一个大问题,但它可能在类似的情况下.
bool gap=false;
DateTime start; // = new DateTime();
for (int i = 0; i < totaldays; i++)
{
if (gap)
{
if (list[i])
{
var whgap = new WorkHistoryGap();
whgap.From = start; //unassigned variable error
whgap.To = dtFrom.AddDays(i);
return whgap;
}
}
else
{
gap = true;
start = dtFrom.AddDays(i);
}
}
Run Code Online (Sandbox Code Playgroud)
我看到的问题是,如果你有一个非空的结构不具有默认构造函数来做到这一点呢?如果start不是一个简单的DateTime对象,还是可以解决这个问题吗?
您好我正在尝试将对象序列化为哈希,但我没有得到我想要的东西.
码:
class Data{
public string Name;
public string Value;
}
//...
var l=new List<Data>();
l.Add(new Data(){Name="foo",Value="bar"});
l.Add(new Data(){Name="biz",Value="baz"});
string json=JsonConvert.SerializeObject(l);
Run Code Online (Sandbox Code Playgroud)
当我这样做时,json结果值是
[{"Name":"foo","Value":"bar"},{"Name":"biz","Value":"baz"}]
Run Code Online (Sandbox Code Playgroud)
我想要的结果是:
[{"foo":"bar"},{"biz":"baz"}]
Run Code Online (Sandbox Code Playgroud)
我如何让JSON像那样出现?
我有各种各样的地狱让 Visual Studio 2010 编译我的 T4 模板。我很确定这个相同的模板在 2008 年有效,但我现在无法确认。我确信它适用于 MonoDevelop。
无论如何,这是我模板的标题:
<#@ template language="C#v3.5" hostspecific="true" #>
<#@ output extension="cs" #>
<#@ assembly name=“System.Core” #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Linq" #>
Run Code Online (Sandbox Code Playgroud)
Visual Studio 2010 抱怨第一行,即模板指令:
以错误的格式指定了指令。将不会运行转换。请以 <#@ name [parameterName="parameterValue"]* #> 格式指定指令
为什么这不能按预期工作?
好的,所以我给了这个功能
int bin(int value, int size, int array[])
Run Code Online (Sandbox Code Playgroud)
我应该在"array []"中找到"value",但是这里的问题在于,在大多数情况下,我们有类似的东西.
int bin(int value, int max, int min, int array[])
Run Code Online (Sandbox Code Playgroud)
从逻辑上讲,这部分的递归要容易得多,因为我仍然可以传递我所在的数字,以及记住数组的大小.
int bin(int array[], int value, int min, int max)
{
if(max < min)
return -1;
else
{
int mid = min + (max - min)/2;
if(array[mid] > value)
return bin(array, value, min, mid-1);
else if(array[mid] < value)
return bin(array, value, mid+1, max);
else
return mid;
}
Run Code Online (Sandbox Code Playgroud)
但由于我只能传递1个整数,我究竟会如何调整这个算法呢?从本质上讲,我只能做这样的事情,但我知道它在逻辑上不会起作用.有没有办法,我可以看到数组的大小?我尝试过,但数字没有正确处理.
int bin(int array[], int value, int size)
{
int mid = size/2;
if(array[mid] …Run Code Online (Sandbox Code Playgroud) 我一直在感觉我的方式围绕C#编译器,它的限制是"继承的实例化泛型类".
无论如何,这是我的测试用例:
class Program
{
static void Main(string[] args)
{
var x = new InClass();
Console.WriteLine(x.Test(10)); //prints foo
Console.ReadLine();
}
}
class BaseClass<Foo, Bar>
{
public virtual Foo Test(Bar b)
{
return default(Foo);
}
public virtual string Test(int b)
{
return "foo"; ;
}
}
class InClass : BaseClass<string, int>
{
/*public override string Test(int b)
{
return "bar";
}*/
}
Run Code Online (Sandbox Code Playgroud)
我认为InClass的这个声明会抛出一个编译错误,因为它Test含糊不清.它也使得非泛型Test不可能在内部调用InClass.请注意我也有一些代码注释掉了InClass.如果我取消注释该代码,我会收到编译器错误.
是否在C#规范中提到了这种行为,或者这是闻所未闻的边缘情况?
我有一个类似于"foo-bar ---- baz - biz"的字符串
什么是最简单,最快速的方法来消除无关紧要的重复字符(-)并使字符串"foo-bar-baz-biz"?
我尝试过做类似的事情.Replace("--","-"),但这似乎只是有点工作......我必须在循环中运行才能完全完成它,我知道有更好的方法.
什么是最好的方式?
我真的很烦我,我必须使用.ContainsKey而不是仅仅value==null在字典中做一个.真人生活的例子:
var dictionary = new Dictionary<string, FooBar>();
var key = "doesnt exist";
var tmp = dictionary[key] ?? new FooBar(x, y);
Run Code Online (Sandbox Code Playgroud)
相反,我有这些选择:
var key = "doesnt exist";
FooBar tmp = null;
if (dictionary.ContainsKey(key))
{
tmp = dictionary[key];
} else {
tmp = new FooBar(x, y);
}
Run Code Online (Sandbox Code Playgroud)
或这个:
FooBar tmp = null;
if (!Dictionary.TryGetValue(key, out tmp))
{
tmp = new FooBar(x, y);
}
Run Code Online (Sandbox Code Playgroud)
对我来说,这段代码非常冗长.是否有一个内置的泛型类实现IDictionary(或以其他方式允许键值类型访问)但在我尝试查找键时不会抛出异常,而是返回null?