小编Ear*_*rlz的帖子

如何从T4中获取项目目录?

我一直在搞乱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,但我得到了一个N​​otImplementedException

.net mono t4

4
推荐指数
1
解决办法
2616
查看次数

bcrypt的.Net实现,它实现了HashAlgorithm?

我想在我的身份验证库中允许bcrypt支持.现在的问题之一是我认为哈希将是类型的HashAlgorithm.Bcrypt.net没有实现这个类.此外,它是密封的,所以我必须自己创建自己的分支并自己修改它.有没有更好的替代方案已经实现了HashAlgorithm?

.net hash bcrypt password-hash bcrypt.net

4
推荐指数
1
解决办法
1897
查看次数

哪一个使用?数据库中的EAV或Blob?

我目前正在努力改造我们应用程序的数据系统.基本上,它的设计使人们可以添加他们想要的所有自定义字段,只有几个常量/总是在那里的字段.

我们目前的设计给我们带来了大量的维护问题.我们所做的是动态地(在运行时)为每个字段向数据库添加一列.我们必须有一个元表和其他残余来维护所有这些动态列.

现在我们正在研究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

4
推荐指数
1
解决办法
912
查看次数

"使用未分配的变量" - 解决方法?

现在我早就知道并且习惯于在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对象,还是可以解决这个问题吗?

.net c# struct compiler-errors

4
推荐指数
2
解决办法
2389
查看次数

使用Json.Net序列化为键值字典?

您好我正在尝试将对象序列化为哈希,但我没有得到我想要的东西.

码:

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像那样出现?

c# json json.net

4
推荐指数
1
解决办法
8521
查看次数

简单的 T4 模板在 Visual Studio 2010 中不起作用,但在 MonoDevelop 中起作用吗?

我有各种各样的地狱让 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"]* #> 格式指定指令

为什么这不能按预期工作?

.net mono t4 visual-studio-2010

4
推荐指数
1
解决办法
707
查看次数

C语言中的二进制搜索递归算法问题

好的,所以我给了这个功能

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 recursion binary-search

4
推荐指数
1
解决办法
1995
查看次数

这种滥用泛型的方式如何不模糊/在编译器中触发错误

我一直在感觉我的方式围绕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#规范中提到了这种行为,或者这是闻所未闻的边缘情况?

.net c# generics specifications compiler-errors

4
推荐指数
1
解决办法
158
查看次数

消除字符串中"无关紧要"重复字符的最简单方法

我有一个类似于"foo-bar ---- baz - biz"的字符串

什么是最简单,最快速的方法来消除无关紧要的重复字符(-)并使字符串"foo-bar-baz-biz"?

我尝试过做类似的事情.Replace("--","-"),但这似乎只是有点工作......我必须在循环中运行才能完全完成它,我知道有更好的方法.

什么是最好的方式?

.net c# string

4
推荐指数
1
解决办法
274
查看次数

是否存在任何类型的通用字典,试图获取不存在的键将返回null?

我真的很烦我,我必须使用.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?

.net c# dictionary

4
推荐指数
1
解决办法
415
查看次数