据我所知(我不会承认),目前流行的编程范例是面向对象(Java,C#,Ruby)和功能(F#).作为一个大多数熟悉第一范式的人,我有几个问题:
显然,没有"最好的"语言,但我想知道是否值得投入时间和精力来学习新的范例.提前致谢!
我正在Windows和Mac之间编写一些跨平台代码.
如果list :: end()"返回一个迭代器来解决列表中最后一个元素之后的位置"并且可以在向前遍历列表时进行检查,那么向后遍历的最佳方法是什么?
此代码适用于Mac但不适用于Windows(不能超出第一个元素):
list<DVFGfxObj*>::iterator iter = m_Objs.end();
for (iter--; iter!=m_Objs.end(); iter--)// By accident discovered that the iterator is circular ?
{
}
Run Code Online (Sandbox Code Playgroud)
这适用于Windows:
list<DVFGfxObj*>::iterator iter = m_Objs.end();
do{
iter--;
} while (*iter != *m_Objs.begin());
Run Code Online (Sandbox Code Playgroud)
是否有另一种可以在for循环中实现的向后遍历方法?
我觉得很奇怪,在Visual C#2008 Express版中,当您使用数据库资源管理器时,您的选择是:
但是如果使用Visual Web Developer 2008 Express,则可以连接到常规SQL Server,Oracle,ODBC等.
对于开发需要与SQL Server数据库通信的命令行或其他C#应用程序的人,您是否真的需要使用一个IDE(Visual Web Developer)和您的程序在另一个(Visual C#)中构建LINQ /数据访问代码?
这不是一个艰难的解决方法,但它似乎很奇怪.如果Microsoft想要强制您升级到Visual Studio以连接到SQL Server,为什么它们会在其中一个免费IDE中包含该功能而不包含其他IDE?我觉得我可能会遗漏一些东西(比如在Visual C#中如何做到这一切).
我有一个单独的线程运行的方法.该线程是从Windows应用程序中的表单创建和启动的.如果从线程内部抛出异常,将其传递回主应用程序的最佳方法是什么.现在,我将对主窗体的引用传递给线程,然后从线程调用该方法,并使该方法被主应用程序线程调用.是否有最好的练习方法,因为我现在对自己的表现不满意.
我的表格示例:
public class frmMyForm : System.Windows.Forms.Form
{
/// <summary>
/// Create a thread
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnTest_Click(object sender, EventArgs e)
{
try
{
//Create and start the thread
ThreadExample pThreadExample = new ThreadExample(this);
pThreadExample.Start();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, Application.ProductName);
}
}
/// <summary>
/// Called from inside the thread
/// </summary>
/// <param name="ex"></param>
public void HandleError(Exception ex)
{
//Invoke a method in the GUI's main thread
this.Invoke(new ThreadExample.delThreadSafeTriggerScript(HandleError), new …
Run Code Online (Sandbox Code Playgroud) 有没有办法在不必逐个更改的情况下为我的所有表单设置相同的图标?类似于在GlobalAssemblyInfo
解决方案中设置所有项目的时候.
我有一个XML文档:
var xml:XML = new XML(<rootNode>
<head>
<meta name="template" content="Default" />
</head>
<mainSection>
<itemList>
<item>
<video src={this.videoURL} />
<img src={this.src}></img>
</item>
</itemList>
</mainSection>
</rootNode>);
Run Code Online (Sandbox Code Playgroud)
我想做的是,当我有某些条件时,在itemList的开头插入另一个条件.
var newNode:XMLList = new XMLList("<item><video src=\"" + _videoSource + "\"></video></item>");
Run Code Online (Sandbox Code Playgroud)
我能够很好地生成和跟踪newNode,但每当我尝试使用insertChildBefore
它添加它时,它总是返回undefined.
var contentNode:XML = new XML(xml.mainSection.itemList.item);
xml.insertChildBefore(contentNode ,newNode)
Run Code Online (Sandbox Code Playgroud)
contentNode
一直跟踪很好,但尝试时总是失败insertChildBefore
或insertChildAfter
.奇怪的是,如果我contentNode
不那么具体(比如xml.mainSection
),那么它会按预期工作.
谢谢你的帮助,这让我疯了!
有没有办法在Visual Studio中使用主题更改解决方案资源管理器的背景颜色? - 或者其他任何方式?
我可以通过改变窗口范围的颜色设置来改变它,但显然这会影响太多.
通常你会发现这样的STL代码:
for (SomeClass::SomeContainer::iterator Iter = m_SomeMemberContainerVar.begin(); Iter != m_SomeMemberContainerVar.end(); ++Iter)
{
}
Run Code Online (Sandbox Code Playgroud)
但我们实际上有建议像这样写:
SomeClass::SomeContainer::iterator Iter = m_SomeMemberContainerVar.begin();
SomeClass::SomeContainer::iterator IterEnd = m_SomeMemberContainerVar.end();
for (; Iter != IterEnd; ++Iter)
{
}
Run Code Online (Sandbox Code Playgroud)
如果您担心范围,请添加括号:
{
SomeClass::SomeContainer::iterator Iter = m_SomeMemberContainerVar.begin();
SomeClass::SomeContainer::iterator IterEnd = m_SomeMemberContainerVar.end();
for (; Iter != IterEnd; ++Iter)
{
}
}
Run Code Online (Sandbox Code Playgroud)
这应该可以提高速度和效率,特别是在编程控制台的情况下,因为在循环的每次迭代中都不会调用.end()函数.我只是把性能提升视为理所当然,这听起来很合理,但我不知道它有多少,它肯定取决于容器的类型和实际使用的STL实现.但是,使用这种风格已经有几个月了,我实际上更喜欢它.
可读性的原因是:for line干净整洁.在实际生产代码预选赛和成员变量这是很容易有真长行,如果你在第一个例子中使用的样式.这就是为什么我故意让它在这个例子中有一个水平滚动条,只是让你看到我在说什么.;)
另一方面,您突然将Iter变量引入for循环的外部范围.但是,至少在我工作的环境中,即使在第一个例子中,也可以在外部范围内访问Iter.
你对此有什么看法?除了可能限制Iter的范围之外,还有第一种风格的专业人士吗?
当我在使用MasterPages的网站上导航时,应用程序是否知道我在哪个页面?如果是这样,它是否存储在我可以访问的对象中?
我问的原因是我可以替换这个:
//masterpage
<div id="nav_main">
<ul><asp:ContentPlaceHolder ID="navigation" runat="server">
</asp:ContentPlaceHolder></ul>
</div>
//content page(s)
<asp:Content ContentPlaceHolderID="navigation" ID="theNav" runat="server">
<li><a href="default.aspx">Home</a></li>
<li id="current"><a href="faq.aspx">FAQ</a></li>
<li><a href="videos.aspx">Videos</a></li>
<li><a href="#">Button 4</a></li>
<li><a href="#">Button 5</a></li>
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
使用更优雅的导航解决方案,通过将列表项的ID设置为"当前"来突出显示页面的链接.目前,每个页面都会重新创建导航,并将其相应链接的ID设置为当前.
c# ×3
.net ×2
c++ ×2
iterator ×2
stl ×2
asp.net ×1
coding-style ×1
exception ×1
icons ×1
iteration ×1
list ×1
master-pages ×1
metadata ×1
navigation ×1
paradigms ×1
sql-server ×1
t-sql ×1
traversal ×1
winforms ×1
xml ×1