我正在编写一个GUI应用程序,我需要启用任意对象的编辑属性(它们的类型仅在运行时才知道).
我决定使用PropertyGrid控件来启用此功能.我创建了以下类:
[TypeConverter(typeof(ExpandableObjectConverter))]
[DefaultPropertyAttribute("Value")]
public class Wrapper
{
public Wrapper(object val)
{
m_Value = val;
}
private object m_Value;
[NotifyParentPropertyAttribute(true)]
[TypeConverter(typeof(ExpandableObjectConverter))]
public object Value
{
get { return m_Value; }
set { m_Value = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
当我得到一个我需要编辑的对象实例时,我为它创建了一个Wrapper并将其设置为所选对象:
Wrapper wrap = new Wrapper(obj);
propertyGrid.SelectedObject = wrap;
Run Code Online (Sandbox Code Playgroud)
但是我遇到了以下问题 - 只有当obj的类型是某种自定义类型(即我自己定义的类,或者内置的复杂类型)时才能按预期工作,但是当obj是基元时则不行.
例如,如果我定义:
[TypeConverter(typeof(ExpandableObjectConverter))]
public class SomeClass
{
public SomeClass()
{
a = 1;
b = 2;
}
public SomeClass(int a, int b)
{
this.a = a;
this.b = b;
}
private …Run Code Online (Sandbox Code Playgroud) 我有一个巨大的表,我需要处理其中的所有行.我总是得到这个丢失的连接消息,我无法重新连接并将光标恢复到它的最后位置.这基本上就是我在这里的代码:
#
import MySQLdb
class DB:
conn = None
def connect(self):
self.conn = MySQLdb.connect('hostname', 'user', '*****', 'some_table', cursorclass=MySQLdb.cursors.SSCursor)
def query(self, sql):
try:
cursor = self.conn.cursor()
cursor.execute(sql)
except (AttributeError, MySQLdb.OperationalError):
self.connect()
cursor = self.conn.cursor()
cursor.execute(sql)
return cursor
#
#
db = DB()
sql = "SELECT bla FROM foo"
data = db.query(sql)
for row in data:
do_something(row)
#
Run Code Online (Sandbox Code Playgroud)
但我总是得到这个:
#
Traceback (most recent call last):
File "teste.py", line 124, in <module>
run()
File "teste.py", line 109, in run
for row in data: …Run Code Online (Sandbox Code Playgroud) 我做了很多的多个文件之间的文本操作需要大量的yy,dd和pING.这可能听起来很疯狂,但有一些较短的做法dd和p一次性吗?也许即使有插件?
我正在建立一个CakePHP网站,我希望有3个部分:
我在routes.php中设置了前缀路由,看起来像
Router::connect('/user/:controller/:action/*', array('prefix' => 'user', 'user' => true));
Router::connect('/admin/:controller/:action/*', array('prefix' => 'admin', 'admin' => true));
Run Code Online (Sandbox Code Playgroud)
我想要它所以任何带有user_前缀的动作都将重定向到登录屏幕,如果尚未登录并且用户类型是'正常'(侧面问题:用户可以正常:P)并且任何带有admin_前缀的操作也会重定向但需要用户类型的管理员.
我开始尝试使用Auth组件,但它似乎非常不灵活,而ACL似乎超过顶部.谁能提供一些关于实现我想要的最佳方法的建议?
我在做:
for (Object key : map.keySet())
if (something)
map.remove(key);
Run Code Online (Sandbox Code Playgroud)
它引发了一个ConcurrentModificationException,所以我将其更改为:
for (Object key : new ArrayList<Object>(map.keySet()))
if (something)
map.remove(key);
Run Code Online (Sandbox Code Playgroud)
这个,以及修改地图的任何其他过程都在同步块中.
有更好的解决方案吗?
如果没有人想出一个更好的解决方案,首先要说没有得到勾号;)
我的模型中有以下关系:
class Show < ActiveRecord::Base
has_many :service_shows
has_many :services, :through => :service_shows
end
class Service < ActiveRecord::Base
has_many :service_shows
has_many :shows, :through => :service_shows
end
class ServiceShow < ActiveRecord::Base
belongs_to :show
belongs_to :service
end
Run Code Online (Sandbox Code Playgroud)
我想查询具有rec_status ='A'的给定服务的所有节目,但我的ActiveRecord技能只有三天左右,所以我不太喜欢.如果我理解正确,我可以简单地调用service.shows并过滤返回的列表,但我只想从数据库中检索我需要的记录 - 我宁愿不把处理器时间和内存浪费在我不记录的记录上我想要.
谢谢!
哪一个更快/更好?
这个:
List<User> list = new List<User>();
User u;
foreach (string s in l)
{
u = new User();
u.Name = s;
list.Add(u);
}
Run Code Online (Sandbox Code Playgroud)
或者这一个:
List<User> list = new List<User>();
foreach (string s in l)
{
User u = new User();
u.Name = s;
list.Add(u);
}
Run Code Online (Sandbox Code Playgroud)
我的新手开发技巧告诉我第一个更好,但是我的一个朋友告诉我错误,但不能给我一个很好的理由为什么第二个更好.
性能有什么不同吗?
我有以下代码我试图"修复"
foreach (System.IO.DirectoryInfo dir in source.GetDirectories())
CopyFilesRecursively(dir, target.CreateSubdirectory(dir.Name),safeFileNames);
foreach (System.IO.FileInfo file in source.GetFiles())
if (safeFileNames)
{
}
Run Code Online (Sandbox Code Playgroud)
代码继续做更多,但我注意到foreach循环不包含任何{}括号...
以下哪项将解决此问题:
foreach (System.IO.DirectoryInfo dir in source.GetDirectories())
{
CopyFilesRecursively(dir, target.CreateSubdirectory(dir.Name),safeFileNames);
}
foreach (System.IO.FileInfo file in source.GetFiles())
{
if (safeFileNames)
{
}
}
Run Code Online (Sandbox Code Playgroud)
要么..........
foreach (System.IO.DirectoryInfo dir in source.GetDirectories())
{
CopyFilesRecursively(dir, target.CreateSubdirectory(dir.Name),safeFileNames);
foreach (System.IO.FileInfo file in source.GetFiles())
if (safeFileNames)
{
}
}
Run Code Online (Sandbox Code Playgroud)
一旦我修好了外环,我就可以看看清理内环了.
另一方面,没有什么比看到代码逻辑不包含控件边界的显式标记更令我讨厌的了.您在Web上的JS代码示例中看到了很多这样的内容.
谢谢.
我正在使用XPath选择一些节点,并希望使用通配符.这可能吗?
像下面这样的东西会很有用:
foreach (XmlNode xml_node in xml_document.SelectNodes("/Data/Customers/D*"))
{
//
}
Run Code Online (Sandbox Code Playgroud) 我有一个程序产生并与CPU重,不稳定的进程通信,而不是由我创建.如果我的应用程序崩溃或被杀死SIGKILL,我希望子进程也被杀死,因此用户不必跟踪它们并手动终止它们.
我知道之前已经讨论过这个主题,但是我已经尝试了所描述的所有方法,并且它们似乎都没有在测试中幸存下来.
我知道它一定是可能的,因为终端一直都在做.如果我在终端中运行某些东西并杀死终端,这些东西总会死掉.
我试过atexit,双叉和ptys.atexit不起作用sigkill; 双叉根本不起作用; 和ptys我没有发现任何方式使用Python来工作.
今天,我发现了这一点prctl(PR_SET_PDEATHSIG, SIGKILL),这应该是儿童进程在父母去世时命令自杀的一种方式.我尝试使用它popen,但它接缝完全没有效果:
import ctypes, subprocess
libc = ctypes.CDLL('/lib/libc.so.6')
PR_SET_PDEATHSIG = 1; TERM = 15
implant_bomb = lambda: libc.prctl(PR_SET_PDEATHSIG, TERM)
subprocess.Popen(['gnuchess'], preexec_fn=implant_bomb)
Run Code Online (Sandbox Code Playgroud)
在上面,创建了子节点并且父节点退出.现在你会期望gnuchess得到一个SIGKILL和死,但它没有.我仍然可以在我的流程管理器中使用100%CPU找到它.
任何人都可以告诉我,我的使用是否有问题prctl?或者您是否知道终端如何设法杀死他们的孩子?