我有这门课:
public class GenericEventArgs<T> : EventArgs
{
public GenericEventArgs() : this(default(T)) {}
public GenericEventArgs(T value) { Value = value; }
public T Value { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
这个事件处理程序代表它:
public delegate void GenericEventHandler<T>(object sender, GenericEventArgs<T> e);
Run Code Online (Sandbox Code Playgroud)
我目前在命名空间中将这些文件放在同一个文件中.这被认为是糟糕/凌乱/等等吗?因为,一般来说我会说每个文件应该只包含一个类.所以为了让它干净,我宁愿GenericEventArgs单独在文件中使用该类.但后来我有这个GenericEventHandler<T>代表,我不知道应该放在哪里.它应该有自己的文件吗?只有...那一行?(当然还有命名空间)
你经常这样做吗?
在我正在开发的项目中,我必须使用相当奇怪的数据源.我可以给它一个"查询",它会返回一个DataTable.但查询不是传统的字符串.它更像是......一组定义我想要的标准的方法调用.这些方面的东西:
var tbl = MySource.GetObject("TheTable");
tbl.AddFilterRow(new FilterRow("Column1", 123, FilterRow.Expression.Equals));
tbl.AddFilterRow(new FilterRow("Column2", 456, FilterRow.Expression.LessThan));
var result = tbl.GetDataTable();
Run Code Online (Sandbox Code Playgroud)
本质上,它支持所有标准的东西(布尔运算符,parantheses,一些函数等),但是编写它的语法对于日常使用来说非常冗长和不舒服.
我想创建一个解析给定表达式的小解析器(比如"Column1 = 123 AND Column2 < 456")并将其转换为上面的函数调用.此外,如果我可以在那里添加参数,那将是很好的,所以我将受到保护免受注入攻击.顶部的最后一小块糖将是如果它可以缓存解析结果并在要在另一个对象上重新执行相同的查询时重用它们.
所以我想知道 - 我可以使用任何现有的解决方案,还是我必须推出自己的表达式解析器?这不是太复杂,但如果我能节省两到三天的编码和一大堆错误来修复,那将是值得的.
我想创建一个类似CMS的站点,用户可以从一些通用页面开始,即
例如,从那里可以动态添加子页面
为了达到这个目的,我计划使用某种自我指涉关联
class Page < ActiveRecord::Base
belongs_to :parent, :class_name => 'Page'
has_many :children, :class_name => 'Page'
end
Run Code Online (Sandbox Code Playgroud)
我正在努力的一件事是路线生成.因为页面可以动态添加,我需要为这些页面动态生成路由,并且无法知道页面可以嵌套多少层次
所以,如果我从主页开始:/
然后开始添加页面即
/用品/第一条/某事/东西,否则/另一个,事情
如何使用rails路由模型实现类似的功能?
执行以下linq to sql语句时:
var stuff = from l in _db.SqlLinks
select new
{
Link = l,
Rating = (from v in l.SqlLinkVotes
where v.Tag == tagId
&& v.VoteDate >= since
select v.Vote).Sum(),
NumberOfVotes = (from v in l.SqlLinkVotes
where v.Tag == tagId
&& v.VoteDate >= since
select v.Vote).Count(),
NumberOfComments = (from v in l.SqlLinkVotes
where v.Tag == tagId
&& v.VoteDate >= since
&& v.Comment != ""
select v.Vote).Count()
};
Run Code Online (Sandbox Code Playgroud)
我得到一个System.InvalidOperationException(无法将null值赋给Int32).
通过调试我发现它来自动态对象的Rating属性.
当没有特定链接的SqlLinkVotes时,Sum()会产生一个空值,但是Rating是一个int,而linq到sql认为Sum()会产生一个int,而不是一个可以为null的int.
我可以轻松编写一个存储过程来解决这个问题,但我认为这是一个很好的方式让我更了解linq到sql.
请帮忙!
我总是不确定,在C++中,restrict关键字是什么意思?
是否意味着赋予函数的两个或更多指针不重叠?还有什么意思?
例如,给定字符串"2009/11/12"我想得到正则表达式("\ d {2}/d {2}/d {4}"),所以我将能够匹配"2001/01/02"也是.
有什么东西可以做到吗?相似的东西?任何想法'如何做到这一点?
是否有这个.net方法的Delphi等价物:
Url.UrlEncode()
注意
我已经好几年没用Delphi了.在我阅读答案时,我注意到当前标记的答案有几个备注和备选方案.我没有机会测试它们,所以我的答案基于最受欢迎的.
为了您自己的利益,请检查以后的答案,并在决定提出最佳答案后,以便每个人都可以从您的经验中受益.
我正在尝试使用std :: for_each来输出向量的内容,这些向量可能包含不同的类型.所以我写了一个通用输出函数,如下所示:
template<typename T> void output(const T& val)
{
cout << val << endl;
}
Run Code Online (Sandbox Code Playgroud)
我想用它:
std::for_each(vec_out.begin(), vec_out.end(), output);
Run Code Online (Sandbox Code Playgroud)
但是编译器在for_each语句中抱怨"无法推断出模板参数".还抱怨"函数模板不能成为另一个函数模板的参数".
这不可能吗?我原以为编译器会知道vec_out(它的向量)的类型,所以应该实例化函数"output(const double&val)"?
如果这不起作用,如何在不编写手动循环的情况下获得类似的STL功能?
我对C++很新,还在学习绳索:-)
我有一个ATL应用程序,其中包含一个包含TAB控件的对话框.该应用程序使用通用控件清单.
在具有视觉样式的XP下,选项卡控件背景与对话框和控件(主要是复选框)的颜色不同,因此看起来非常难看.
我该如何解决这个问题?
我需要在MS Access数据库中创建一个表.考虑一下,'ConfigStructure.mdb'是我的数据库名称,我需要在C#中用这个数据库创建一个表.
我怎样才能做到这一点?我尝试使用下面的代码,但它无法正常工作.
OleDbConnection myConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + frmMain.strFilePath + "\\ConfigStructure.mdb");
myConnection.Open();
string strTemp = " KEY Text, VALUE Text ";
OleDbCommand myCommand = new OleDbCommand();
myCommand.Connection = myConnection;
myCommand.CommandText = "CREATE TABLE table1(" + strTemp + ")";
myCommand.ExecuteNonQuery();
myCommand.Connection.Close();
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误,
"System.Data.OleDb.OleDbException: Syntax error in field definition
System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)\r\n at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)\r\n at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)\r\n at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)"
Run Code Online (Sandbox Code Playgroud)