这个C#脚本中if else if else语句有什么问题?

时间:2015-09-27 16:04:35

标签: c# if-statement equality

我在使用C#脚本时遇到问题,该脚本使用Sony Vegas Pro脚本API生成视频剪辑的编辑列表,以便在ffmpeg中进行修剪。完整的脚本和目的的详细信息可以在http://www.sonycreativesoftware.com/forums/showmessage.asp?forumid=21&messageid=932542找到。

我的部分脚本如下所示。当我运行脚本时,我收到错误“名称'OffsetAdjusterFrames'在当前上下文中不存在”,与行Timecode OffsetAdjuster = Timecode.FromFrames(OffsetAdjusterFrames);相关,而“名称'DurationAdjusterFrames '在当前上下文中不存在“与下一行有关。

问题似乎与行if (clipOffsetOriginalFrames == 0)if else if else语句中的其他内容有关。如果我通过评论并明确声明if else if elseOffsetAdjusterFrames来绕过整个DurationAdjusterFrames语句,那么脚本的其余部分就会正常工作。

任何帮助都会受到赞赏,因为我已经用尽了一些东西。感谢。

编辑:这与enter link description here不同,因为这是C#,那是Java,所以它并不是真的重复,但一般的解决方案是相同的。

...
    Timecode clipOffsetOriginal = videoEvent.ActiveTake.Offset;
    // clipOffsetOriginal as a number of frames
    Int64 clipOffsetOriginalFrames = videoEvent.ActiveTake.Offset.FrameCount;

    Timecode clipOffset = clipOffsetOriginal - startAdd;
    Timecode clipDuration = videoEvent.Length + startAdd + endAdd;

    // Reset start to zero if start was not trimmed at all, and compensate length
    if (clipOffsetOriginalFrames == 0)
    {
        int OffsetAdjusterFrames = 2;
        int DurationAdjusterFrames = -2;
    }
    // Reset start to zero if start had been trimmed by just 1 frame, and compensate length
    else if (clipOffsetOriginalFrames == 1)
    {
        int OffsetAdjusterFrames = 1;
        int DurationAdjusterFrames = -1;
    }
    else
    {
        int OffsetAdjusterFrames = 0;
        int DurationAdjusterFrames = 0;
    }

    Timecode OffsetAdjuster = Timecode.FromFrames(OffsetAdjusterFrames);
    Timecode DurationAdjuster = Timecode.FromFrames(DurationAdjusterFrames);
    Timecode clipOffsetAdjusted = clipOffset + OffsetAdjuster;
    Timecode clipDurationAdjusted = clipDuration + DurationAdjuster;

    // Convert start and duration from timecode to seconds
    double start = clipOffsetAdjusted.ToMilliseconds() / 1000;
            double duration = clipDurationAdjusted.ToMilliseconds() / 1000;

    string triminfo = String.Format(basename + ".mp4 " + start + " " + duration);
...

1 个答案:

答案 0 :(得分:1)

变量<script> jQuery('.plus').click(function() { var qut = jQuery(this).prev().val(); var plus = (parseInt(qut) + 1); jQuery(this).prev().val(plus); if (plus > parseInt(0)) { var price = jQuery(this).prev().data('price'); jQuery(this).parent().next().html(parseInt(plus) * parseInt(price)); } else { jQuery(this).parent().next().html(price); } var price = []; var p = 0; jQuery('.finalprice').each(function() { p = (parseInt(p) + parseInt(jQuery(this).html()));}); jQuery('.totalprice').html(p);}); jQuery('.minus').click(function() { var qut = jQuery(this).next().val(); var plus = (parseInt(qut) - 1); if (plus > parseInt(0)) { jQuery(this).next().val(plus); var price = jQuery(this).next().data('price'); jQuery(this).parent().next().html(parseInt(plus) * parseInt(price)); } else { jQuery(this).parent().next().html(price);} var p = 0; jQuery('.finalprice').each(function() { p = (parseInt(p) + parseInt(jQuery(this).html()));}); jQuery('.totalprice').html(p);}); </script> `<form action="confirm.php" method="post">` ` <?php` ` $i=0;` ` if(isset($_POST['chk'])){` ` foreach($_POST['chk'] as $key=>$value){` ` echo "<tr><td><input type=\"text\" name=\"prdct[".$i."]\" readonly style=\"border:none;width:auto;\" value=\"".$_POST['nam'][$key]."\"></td>";` ` echo "<td><span class=\"minus\" style=\"font-size:17px!important;\">-</span>";` ` echo "<input class=\"Quantity\" style=\"margin:1px;text-align:center\" size=\"3\" type=\"text\" name=\"quantity[".$i."]\" data-price=\"".$value."\" value=\"1\"><span class=\"plus\"style=\"font-size:17px!important;\">+ </span> </td>";` ` echo "<td class=\"finalprice\">".$value."</td></tr>";` ` }` ` } ` ` ?>`OffsetAdjusterFrames在if语句中声明,因此它们是局部变量,不能从if语句外部调用。

当你在if语句之外移动声明时,比如说在方法中,它起作用,因为变量的范围在方法中,因此只要在方法中,就可以在if语句之外调用。 / p>

所以基本上只是在方法的开头声明变量,如下所示:

DurationAdjusterFrames

然后在if语句中分配值,如下所示:

int OffsetAdjusterFrames;
int DurationAdjusterFrames;