小编Rob*_*ney的帖子

Python习惯用法返回第一项或无

我确信有一种更简单的方法可以解决这个问题.

我正在调用一堆返回列表的方法.该列表可能为空.如果列表非空,我想返回第一个项目; 否则,我想要返回无.此代码有效:

my_list = get_list()
if len(my_list) > 0: return my_list[0]
return None
Run Code Online (Sandbox Code Playgroud)

在我看来,应该有一个简单的单行成语,但对于我的生活,我无法想到它.在那儿?

编辑:

我在这里寻找单行表达式的原因并不是因为我喜欢简洁的代码,而是因为我必须编写很多像这样的代码:

x = get_first_list()
if x:
    # do something with x[0]
    # inevitably forget the [0] part, and have a bug to fix
y = get_second_list()
if y:
    # do something with y[0]
    # inevitably forget the [0] part AGAIN, and have another bug to fix
Run Code Online (Sandbox Code Playgroud)

我想要做的事情当然可以用一个函数来完成(也可能是):

def first_item(list_or_none):
    if list_or_none: return list_or_none[0]

x = first_item(get_first_list())
if x:
    # do something with x
y …
Run Code Online (Sandbox Code Playgroud)

python idioms python-2.4

241
推荐指数
8
解决办法
27万
查看次数

你必须维持的最不健全的计划是什么?

我经常被要求对由真正的火箭外科医生建造的系统进行维护工作.这有很多错误,很难知道从哪里开始.

不,等等,我将从一开始就开始:在项目的早期阶段,设计师被告知系统需要扩展,他会读到可扩展性问题的根源是应用程序和数据库之间的流量服务器,所以他确保最小化这种流量.怎么样?通过将所有应用程序逻辑放在SQL Server存储过程中.

认真.大量的应用程序由HTML前端制定XML消息.当中间层接收XML消息时,它使用文档元素的标记名作为它应调用的存储过程的名称,并调用SP,将整个XML消息作为参数传递给它.它接收SP返回的XML消息并将其直接返回到前端. 应用程序层中没有其他逻辑.

(这里在中间层验证对架构库传入的XML消息的一些代码,但我删除了,经查1后)只有消息的极少数曾与架构,2)消息实际上并没有符合对于这些模式,以及3)在验证消息之后,如果遇到任何错误,该方法将丢弃它们."这款保险丝盒可以节省时间 - 它来自工厂预装的便士!")

我以前见过那些做错事的软件.很多.我写了很多.但我从来没有见过任何钢铁般的决心做出错误的事情,在每一个可能的转折点,这都体现在这个系统的设计和编程中.

好吧,至少他跟他所知道的一样,对吧?嗯.显然,他所知道的是Access.他并不真正理解 Access.或数据库.

以下是此代码中的常见模式:

SELECT @TestCodeID FROM TestCode WHERE TestCode = @TestCode

SELECT @CountryID FROM Country WHERE CountryAbbr = @CountryAbbr

SELECT Invoice.*, TestCode.*, Country.*
   FROM Invoice
   JOIN TestCode ON Invoice.TestCodeID = TestCode.ID
   JOIN Country ON Invoice.CountryID = Country.ID
   WHERE Invoice.TestCodeID = @TestCodeID AND Invoice.CountryID = @CountryID

好的.您也不信任查询优化器.但是这个怎么样?(最初,我打算在你曾经遇到过的源代码中最好的评论中发布这个内容吗?但我意识到还有更多的内容要写,而不仅仅是这一条评论,事情就失控了.)许多实用程序存储过程结束时,您将看到如下所示的代码:

-- Fix NULLs
SET @TargetValue = ISNULL(@TargetValue, -9999)

是的,那段代码完全是你不能让自己相信它正在做的事情,以免你被激怒.如果变量包含NULL,则通过将其值更改为-9999来警告调用者.以下是这个数字的常用方法:

-- Get target value
EXEC …

anti-patterns

24
推荐指数
5
解决办法
3478
查看次数

如何使安装程序的版本号与已安装的程序集的版本号保持同步?

在我目前的项目中,我正在制作每周版本.我一直在使用这篇文章中描述的技术来保持项目中所有程序集的版本号同步.(我现在没有任何理由单独跟踪组件的版本号,但我确信那一天最终会到来.)

当我推出一个版本时,我构建了一个新版本的安装程序.与可以从共享的SolutionInfo.cs文件中获取其版本号的所有程序集不同,安装程序的版本号不是最好的,我可以说是程序集属性.所以我的发布过程包括手动推进安装项目中的版本号.

或者,我应该说,通常包括这样做.我想把它变成我无法搞砸的东西.我发现设置和部署项目的文档令人惊讶地不透明(如果用户将其安装到非默认路径,那么找出如何使MSI正确卸载是非常困难的,这是一个非常疯狂的常见用例,无法记录)并且不知道是否有可能这样做.

有任何想法吗?

编辑:

只是为了澄清,这是我正在谈论的Visual Studio设置和部署项目.

c# deployment visual-studio

24
推荐指数
1
解决办法
2万
查看次数

如何使在水平StackPanel中排列的元素共享其文本内容的公共基线?

这是我遇到的问题的一个简单例子:

<StackPanel Orientation="Horizontal">
    <Label>Foo</Label>
    <TextBox>Bar</TextBox>
    <ComboBox>
        <TextBlock>Baz</TextBlock>
        <TextBlock>Bat</TextBlock>
    </ComboBox>
    <TextBlock>Plugh</TextBlock>
    <TextBlock VerticalAlignment="Bottom">XYZZY</TextBlock>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

这些元素中的每一个除了TextBoxComboBox垂直定位它们包含的文本不同,它看起来很丑陋.

我可以通过Margin为每个元素指定一个来排列这些元素中的文本.这是有效的,除了边距是以像素为单位,而不是相对于显示器的分辨率或字体大小或任何其他可变的东西.

我甚至不确定如何在运行时计算控件的正确底边距.

最好的方法是什么?

wpf layout stackpanel

20
推荐指数
3
解决办法
3万
查看次数

为什么我的装饰者在应用它的元素发生变化时不会重新渲染?

在我正在构建的用户界面中,只要面板中的一个控件具有焦点,我就想要装饰面板.因此,我处理IsKeyboardFocusWithinChanged事件,并在元素获得焦点时添加元素,并在焦点失去焦点时移除元素.这似乎工作正常.

我遇到的问题是,如果装饰元素的边界发生变化,则不会重新渲染装饰器.例如,在这个简单的情况下:

<WrapPanel Orientation="Horizontal"
           IsKeyboardFocusChanged="Panel_IsKeyboardFocusChanged">
   <Label>Caption</Label>
   <TextBox>Data</TextBox>
</WrapPanel>
Run Code Online (Sandbox Code Playgroud)

装饰器正确地装饰了接收焦点WrapPanel时的边界TextBox,但是当我输入文本时,TextBox会在装饰边缘下面展开.当然,只要我做任何迫使装饰者渲染的东西,例如ALT-TAB从应用程序中移出或给予另一个小组焦点,它就会自行纠正.但是,如果装饰元素的边界发生变化,我怎样才能重新渲染它?

wpf adorner

16
推荐指数
1
解决办法
2万
查看次数

在开发期间管理多个应用配置文件

我正在构建一个由几个不同客户使用的应用程序.每个客户都有相当数量的自定义业务逻辑,我已经巧妙地将其重构为一个在运行时加载的程序集.该程序集的名称以及许多其他客户特定的设置存储在应用程序的配置文件中.

现在,这是为了调试客户foo的应用程序我必须做的事情:

  1. 转到项目目录中的文件系统并删除 app.config
  2. 复制app.config.fooapp.config.foo - Copy.
  3. 重命名app.config.foo - Copyapp.config.
  4. 告诉Windows是的,我想更改文件的扩展名.
  5. 切换回Visual Studio.
  6. 打开Settings.settings我项目中的项目.
  7. 如果我想使用已更改的新设置,请点击"是"13或14次,如果我想要使用已更改的新设置app.config.
  8. 关闭Settings.settings.

好的!现在我准备调试了!

在我看来,打开的rigamarole Settings.settings是,或者应该是不必要的:我不需要Settings.cs重新生成默认值,因为我不使用它们.但这是我知道的唯一方法,让VS知道app.config文件已更改的事实,以便构建将其复制到输出目录.

必须有一种更简单的方法来做到这一点.它是什么?

.net c# app-config visual-studio

10
推荐指数
2
解决办法
3万
查看次数

如何将内联内容从一个FlowDocument插入另一个?

我正在构建一个应用程序,它需要允许用户从另一个插入RichTextBox当前插入位置的文本中插入文本.在运行这种技术之前,我花了很多时间搞砸了FlowDocument对象模型 - source并且target都是FlowDocuments:

using (MemoryStream ms = new MemoryStream())
{
    TextRange tr = new TextRange(source.ContentStart, source.ContentEnd);                    
    tr.Save(ms, DataFormats.Xaml);
    ms.Seek(0, SeekOrigin.Begin);
    tr = new TextRange(target.CaretPosition, target.CaretPosition);
    tr.Load(ms, DataFormats.Xaml);
}
Run Code Online (Sandbox Code Playgroud)

这非常有效.

我现在唯一的问题是它总是将源插入一个新的段落.它打破插入符号的当前运行(或其他),插入源,并结束段落.如果源实际上一个段落(或多个段落),那是合适的,但如果它只是(比方说)一行文本不合适.

我认为对此的答案很可能是最终检查目标是否完全由单个块组成,如果是,则TextRange在保存之前将块设置为块内容的开头和结尾到溪边.

整个世界FlowDocument对我来说都是一片黑暗神秘的海洋.如果必须的话,我可以成为它的专家(根据陀思妥耶夫斯基:"人是可以适应任何事物的动物."),但是如果有人已经想出这个并且可以告诉我该怎么做它会让我生活更容易.

c# wpf richtextbox flowdocument textrange

10
推荐指数
1
解决办法
3307
查看次数

我应该使用什么页面图像生成技术?

我正在构建一个桌面应用程序,它将人类可读的输出显示为WebBrowser控件中显示的XHTML.最终,必须将此输出从XHTML文件转换为成像系统中的文档图像.与XHTML文档不同,文档图像必须分为物理页面; 另外 - 这是杀死我的部分 - 这些页面上需要有页眉和页脚.

就像我想的那样,我不能简单地将WebBrowser打印到文件中 - 它支持的页眉/页脚选项并不是那么复杂.因此,我正在试图找出用于生成这些图像的正确技术.

我似乎(尽管不是强制性的)我最终会做的是生成HTML文档的PDF版本(这样我可以添加页眉和页脚),然后将PDF呈现为TIFF,这是最终的格式成像系统想要的.所以我在考虑的是:

  • 使用某种XHTML-to-PDF转换软件.这样做的问题是,如果不进行大量的评估和测试,我无法弄清楚我所看到的产品是否能够做我需要的,即采用现有的XHTML文档,用标题装饰它们和页脚并将它们分页.

  • 使用XSL-FO生成PDF.作为一个忍者级别的XSLT极客在这里有所帮助(这就是我首先制作XHTML的方式),但它仍然看起来像一个笨拙而缓慢的解决方案,有许多移动部件.这也意味着我将一个庞大的笨重的Java程序放在我干净的.NET系统中间,尽管如果这是正确的答案,我肯定已经足够成年了.

  • 使用一些我还没有想过的其他技术,比如LaTeX.也许有一些神奇的页面成像工具可以将XHTML直接转换为具有页眉和页脚的TIFF.那将是理想的.

我主要担心的是:

  • 我正在建立一个商业产品; 我使用的任何技术都需要经济实惠且可支持.它不一定是免费的.

  • 我不想在兔子洞里消失三个月,敲打这些东西让它发挥作用.这直观地看起来像是一种问题空间,我只能在评估和拒绝工具时浪费大量时间.

  • 无论我采用什么解决方案,都需要相对不受格式化XHTML变化的影响.我首先使用XSLT并生成XHTML的全部原因是我正在生成的文档是使用随时更改的业务规则动态组合的.

我花了很多时间寻找替代品,但没有发现任何明显的答案.但也许你们中的一个好人已经解决了这个问题,如果是这样,我想站在你的肩膀上.

.net c# formatting printing-web-page

9
推荐指数
1
解决办法
1372
查看次数

当我使用故事板时,为什么这些动画不起作用?

我已经创建了一个简单的子类StackPanel,我可以使用动画在屏幕上移动TranslateTransform.它看起来像这样:

public class MovingStackPanel : StackPanel
{
    public void BeginMove(Point translatePosition)
    {
        RenderTransform = new TranslateTransform();
        Duration d = new Duration(new TimeSpan(0, 0, 0, 0, 400));
        DoubleAnimation x = new DoubleAnimation(translatePosition.X, d);
        DoubleAnimation y = new DoubleAnimation(translatePosition.Y, d);
        /*
        Storyboard.SetTarget(x, RenderTransform);
        Storyboard.SetTargetProperty(x, new PropertyPath("X"));

        Storyboard.SetTarget(y, RenderTransform);
        Storyboard.SetTargetProperty(y, new PropertyPath("Y"));

        Storyboard sb = new Storyboard();
        sb.Children.Add(x);
        sb.Children.Add(y);
        sb.Completed += sb_Completed;
        sb.Begin();
        */
        RenderTransform.BeginAnimation(TranslateTransform.XProperty, x);
        RenderTransform.BeginAnimation(TranslateTransform.YProperty, y);
    }

    void sb_Completed(object sender, EventArgs e)
    {
        Console.WriteLine("Completed.");
    }
} 
Run Code Online (Sandbox Code Playgroud)

这是我的问题:如果我直接为X和Y属性设置动画,就像上面的代码一样,它可以工作.但是,如果我使用上面注释掉的代码,这实际上是 …

wpf animation storyboard

9
推荐指数
2
解决办法
7722
查看次数

C#动态类型语言

使用.NET 3.5中的新功能(例如var,Lambda,linq等)以及其他方法,我们可以得出结论,C#不仅是静态类型语言,还有动态类型

为什么或者为什么不?

编辑#1

正如以下许多海报所声称的那样,.net 4.0将为该语言添加动态类型.这会减慢语言吗?

每个版本csharp都需要使用不同语言的东西.就.Net1.1而言,我们的祖先甚至不打算将其作为功能语言......

编辑#2

我想很多人都误解了这个问题; 因为我指的是整体的C#语言,包括即将推出的4.0版本.因此,可以说语言是动态输入的......

.net c# programming-languages

7
推荐指数
1
解决办法
1483
查看次数