我有一个类似于下面的界面:
public interface IInterface<T>
where T : IInterface<T>
{
}
Run Code Online (Sandbox Code Playgroud)
现在我需要使用反射创建一个表示此接口的类型,例如
typeof(IInterface<>).MakeGenericType(someType);
Run Code Online (Sandbox Code Playgroud)
但是,我实际上并不知道什么类型的'someType'将在运行时之前,并且该类型可能无法作为通用接口的类型参数有效,因此MakeGenericType失败.
问题是,如何检查'someType'是否对泛型约束有效?
我有两种不同的对象类型存储在RavenDb中,它们是父/子类型关系,在JSON中是这样的:
Account/1
{
"Name": "Acc1",
}
Items/1
{
"Account": "Account/1",
"Value" : "100",
"Tags": [
"tag1",
"tag2"]
}
Items/2
{
"Account": "Account/1",
"Value" : "50",
"Tags": [
"tag2"]
}
Run Code Online (Sandbox Code Playgroud)
请注意,我不想将它们存储在同一文档中,因为一个帐户可能有数千个项目.
我正在尝试编写一个map/reduce索引,它会返回类似于:
{
"Account": "Acc1",
"TagInfo": [
{ "TagName" : "tag1",
"Count" : "1", //Count of all the "tag1" occurrences for acc1
"Value" : "100" //Sum of all the Values for acc1 which are tagged 'tag1'
},
{ "TagName" : "tag2",
"Count" : "2", //Two items are tagged "tag2"
"Value" : …Run Code Online (Sandbox Code Playgroud) NHibernate 试图加载一个小的数据层次结构时遇到了问题。我的域模型如下所示:
class GrandParent
{
int ID{get;set;}
IList<Parent> Parents {get; set;}
}
class Parent
{
IList<Child> Children {get; set;}
}
class Child
{
}
Run Code Online (Sandbox Code Playgroud)
我想为给定的祖父母加载所有父母和孩子。这个 Linq-to-NH 查询创建了正确的 SQL 并按预期加载了 GrandParent:(该示例假设祖父母有 2 个父母,每个父母都有 2 个子对象 - 所以总共有 4 个子对象)。
var linq = session.Linq<GrandParent>();
linq.Expand("Parents");
linq.Expand("Parents.Children");
linq.QueryOptions.RegisterCustomAction(c =>
c.SetResultTransformer(new DistinctRootEntityResultTransformer()));
var grandparent = (select g from session.Linq<GrandParent>()
where g.ID == 1
select g).ToList();
Assert(grandparent.Count == 1); //Works
Assert(grandparent.Parents.Count == 2); //Fails - count = 4!
Run Code Online (Sandbox Code Playgroud)
Grandparent.Parents 集合包含 4 个项目,其中 2 个是重复的。似乎 DistinctRootEntityResultTransformer …
我正在努力找出在MVC中做某事的正确方法,这在WebForms中并不困难,我希望有人能够指出我正确的方向.
基本上,我正在显示数据表,用户应该能够选择零行或多行.当他们按下提交时,我希望我的控制器知道哪些行已被选中,因为这将影响屏幕上的其他数据.
我的视图如下所示:
<form action="/Summary/Index" method="post">
<table>
<thead>
<tr>
<th></th>
<th>Name</th>
<th>Age</th>
</tr>
</thead>
<tbody>
<% foreach (Person p in Model)
{ %>
<tr>
<td>
<input type="checkbox" name="" /> <!-- HOW SHOULD THIS BE RENDERED? -->
</td>
<td><%= p.Name %></td>
<td><%= p.Age %></td>
</tr>
<% } %>
</tbody>
</table>
<input type="submit" value="Update" />
</form>
Run Code Online (Sandbox Code Playgroud)
因此,当单击提交按钮时,表单将发布到当前URL.请注意,模型"Person"只是一个ViewModel,因此我可以根据需要添加任何必要的UI相关属性.我应该向Person添加一个'Selected'属性并让我的控制器获取Person的列表/数组并检查每个属性的选定属性吗?
请注意,我需要一个无需JavaScript的解决方案,我不希望我的控制器关注如何检索复选框的值 - 如果需要,我很乐意编写自定义的ModelBinder.
任何人都可以告诉我如何做到这一点吗?
非常感谢,西蒙.
我正在构建一个 Sprache 解析器来解析类似于 SQL 搜索条件的表达式。例如Property = 123或Property > AnotherProperty
到目前为止,这两个示例都有效,但是我正在努力弄清楚我需要做什么才能允许 ANDing/ORing 条件和括号。
到目前为止,基本上我有这个:
private static readonly Parser<string> Operators =
Parse.String("+").Or(Parse.String("-")).Or(Parse.String("="))
.Or(Parse.String("<")).Or(Parse.String(">"))
.Or(Parse.String("<=")).Or(Parse.String(">=")).Or(Parse.String("<>"))
.Text();
private static readonly Parser<IdentifierExpression> Identifier =
from first in Parse.Letter.Once()
from rest in Parse.LetterOrDigit.Many()
select new IdentifierExpression(first.Concat(rest).ToArray());
public static readonly Parser<Expression> Integer =
Parse.Number.Select(n => new IntegerExpression {Value = int.Parse(n)});
public static readonly Parser<SearchCondition> SearchCondition =
from left in Identifier.Or(Number)
from op in Operators.Token()
from right in Identifier.Or(Number)
select new SearchCondition { Left = …Run Code Online (Sandbox Code Playgroud) 给定一个像这样的模块:
export module Common.Enums {
export enum Enum1 { Item = 0 }
export enum Enum2 { Item = 0 }
export enum Enum3 { Item = 0 }
}
Run Code Online (Sandbox Code Playgroud)
我想用一个字符串属性定义一个接口,该属性限制为枚举之一的名称,例如:
interface Test {
enumName: keyof Common.Enums; // <<< This doesn't work, but something like that is needed
enumName2: 'Enum1' | 'Enum2' | 'Enum3'; // <<< This does work, but is undesirable
}
Run Code Online (Sandbox Code Playgroud)
但是-有很多枚举(它们都是生成的),所以我不想硬编码'Enum1' | 'Enum2' | 'Enum3'。
我正在使用 Seafile(在 docker 上)将一些文件同步到 Synology nas,并且一切正常。我创建了一个指向/shared容器中文件夹的外部文件夹。
我想我已经知道答案了,但是同步到服务器的文件是否“正常”存储在某处?即,如果我同步一个名为“photos”的文件夹并且其中包含“a.jpg”,我是否能够在 Seafile 服务器上找到该文件?
问题的原因是我想备份同步的原始文件,而不是备份seafile数据库等。
(我知道syncthing可以满足我的要求,所以我可能会选择使用它,只是想确认我的理解)
谢谢
我创建了一个简单的Asp.Net自定义控件,它自动组合所有正确的样式表以发送给客户端(基于浏览器类型/版本/等).
但是,因为在设计时头标签看起来像这样......
<head>
<cc:CssControl runat="server" />
</head>
Run Code Online (Sandbox Code Playgroud)
... VS无法为css类名提供intellisense.我已经尝试为控件创建一个ControlDesigner,通过覆盖GetDesignTimeHtml()返回一些硬编码的<link />,但这似乎也没有帮助.
有人有任何想法吗?
谢谢,
西蒙.
给定一个这样的接口:
interface IDelegates {
delegateOne: (name: string, age: number) => string;
delegateTwo: (date: Date) => number;
}
Run Code Online (Sandbox Code Playgroud)
如何根据接口属性名称定义一个接受正确委托类型的函数的方法?
我可以获得一个仅包含我想要的属性的类型,Pick<IDelegates, 'delegateOne'>该属性返回一个类型:
{
delegateOne: (name: string, age: number) => string;
}
Run Code Online (Sandbox Code Playgroud)
但我不知道是否有办法做Parameters<Pick<IDelegates, 'delegateOne'>>
我明白为什么这行不通,但是可能有办法吗?基本上我需要什么,只PickOne返回属性“delegateOne”,而不是包含该属性的类型。
我有一个 ASP.NET 网站,其中包含许多长时间运行(5 分钟到 2 小时)的用户启动的任务。我希望每个用户都能够看到自己作业的进度,并且能够关闭浏览器并稍后返回。
当前的计划是在每个作业启动时将其存储在数据库中,并将消息发布到 RabbitMQ 队列,Windows 服务将接收该消息并开始处理该作业。
但是,我不确定将进度信息从服务传递回网络服务器的最佳方法?我看到两个选择:
我倾向于第二种选择,因为我真的不想通过定期轮询/写入进度信息来增加数据库的更多开销。然而,有很多关于使用 RabbitMQ(作为消费者)的警告- 因为我没有发送重要消息(如果进度消息没有被处理也没关系),我想知道这是否重要?这并不是说困难(著名的遗言)。
这个选项听起来合理吗?还有更好的选择吗?
architecture asp.net windows-services rabbitmq long-running-processes
c# ×5
asp.net ×2
typescript ×2
architecture ×1
asp.net-mvc ×1
css ×1
generics ×1
intellisense ×1
mapreduce ×1
nhibernate ×1
parsing ×1
rabbitmq ×1
ravendb ×1
reflection ×1
sprache ×1