কম্পিউটার টিউটোরিয়াল

C#-এ স্ট্রিং যেভাবে ভ্যালিড কিওয়ার্ড কিনা চেক করা

C#-এ একটি স্ট্রিং যেভাবে ভ্যালিড আইডেন্টিফায়ার (ভেরিয়েবল নাম, মেথড নাম ইত্যাদি) হতে পারে কিনা তা চেক করার জন্য CodeDomProvider.IsValidIdentifier মেথড ব্যবহার করা হয়। যদি এটি false রিটার্ন করে, তবে স্ট্রিংটি একটি রিজার্ভড কিওয়ার্ড বা অবৈধ আইডেন্টিফায়ার।

পদ্ধতি: CodeDomProvider.IsValidIdentifier


using System;
using System.CodeDom.Compiler;

CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
// অথবা
CodeDomProvider provider = CodeDomProvider.CreateProvider("C#");

সম্পূর্ণ উদাহরণ


using System;
using System.CodeDom.Compiler;

namespace Program
{
    class Demo
    {
        static void Main(string[] args)
        {
            string str1 = "amit";    // বৈধ আইডেন্টিফায়ার
            string str2 = "for";     // C# কিওয়ার্ড
            string str3 = "123abc";  // অবৈধ (সংখ্যা দিয়ে শুরু)
            string str4 = "my_var";  // বৈধ
            
            CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
            
            CheckIdentifier(provider, str1);
            CheckIdentifier(provider, str2);
            CheckIdentifier(provider, str3);
            CheckIdentifier(provider, str4);
        }
        
        static void CheckIdentifier(CodeDomProvider provider, string str)
        {
            if (provider.IsValidIdentifier(str))
            {
                Console.WriteLine($"\"{str}\" → বৈধ আইডেন্টিফায়ার ✓");
            }
            else
            {
                // কিওয়ার্ড কিনা চেক করার জন্য আলাদা লজিক দরকার
                Console.WriteLine($"\"{str}\" → অবৈধ আইডেন্টিফায়ার/কিওয়ার্ড ✗");
            }
        }
    }
}

আউটপুট


"amit" → বৈধ আইডেন্টিফায়ার ✓
"for" → অবৈধ আইডেন্টিফায়ার/কিওয়ার্ড ✗
"123abc" → অবৈধ আইডেন্টিফায়ার/কিওয়ার্ড ✗
"my_var" → বৈধ আইডেন্টিফায়ার ✓

গুরুত্বপূর্ণ সীমাবদ্ধতা

IsValidIdentifier শুধু সিনট্যাক্স যাচাই করে। এটি বলে দেয় না যে স্ট্রিংটি কিওয়ার্ড কিনা। উদাহরণস্বরূপ, "class" এবং "123abc" দুটোই false রিটার্ন করবে।

কিওয়ার্ড স্পেসিফিক্যালি চেক করার পদ্ধতি


using System;
using System.Collections.Generic;

public static class KeywordChecker
{
    // C# কিওয়ার্ড লিস্ট (আংশিক)
    private static readonly HashSet<string> _keywords = new HashSet<string>(StringComparer.Ordinal)
    {
        "abstract", "as", "base", "bool", "break", "byte", "case", "catch", "char",
        "checked", "class", "const", "continue", "decimal", "default", "delegate",
        "do", "double", "else", "enum", "event", "explicit", "extern", "false",
        "finally", "fixed", "float", "for", "foreach", "goto", "if", "implicit",
        "in", "int", "interface", "internal", "is", "lock", "long", "namespace",
        "new", "null", "object", "operator", "out", "override", "params", "private",
        "protected", "public", "readonly", "ref", "return", "sbyte", "sealed",
        "short", "sizeof", "stackalloc", "static", "string", "struct", "switch",
        "this", "throw", "true", "try", "typeof", "uint", "ulong", "unchecked",
        "unsafe", "ushort", "using", "virtual", "void", "volatile", "while",
        // Contextual keywords
        "add", "alias", "ascending", "async", "await", "by", "descending",
        "dynamic", "equals", "from", "get", "group", "into", "join", "let",
        "nameof", "on", "orderby", "partial", "remove", "select", "set", "value",
        "var", "when", "where", "yield"
    };
    
    public static bool IsKeyword(string str)
    {
        return _keywords.Contains(str);
    }
    
    public static bool IsValidIdentifier(string str)
    {
        if (string.IsNullOrEmpty(str)) return false;
        if (IsKeyword(str)) return false;
        
        // সিনট্যাক্স চেক: প্রথম অক্ষর লেটার বা আন্ডারস্কোর, বাকি লেটার/ডিজিট/আন্ডারস্কোর
        if (!char.IsLetter(str[0]) && str[0] != '_') return false;
        for (int i = 1; i < str.Length; i++)
        {
            char c = str[i];
            if (!char.IsLetterOrDigit(c) && c != '_') return false;
        }
        return true;
    }
}

// ব্যবহার
Console.WriteLine(KeywordChecker.IsKeyword("for"));      // true
Console.WriteLine(KeywordChecker.IsKeyword("amit"));     // false
Console.WriteLine(KeywordChecker.IsValidIdentifier("for"));      // false
Console.WriteLine(KeywordChecker.IsValidIdentifier("amit"));     // true
Console.WriteLine(KeywordChecker.IsValidIdentifier("123abc"));   // false

Roslyn ব্যবহার করে আরও উন্নত চেক (সুপারিশ করা)


// NuGet: Microsoft.CodeAnalysis.CSharp
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;

public static bool IsValidIdentifierRoslyn(string name)
{
    return SyntaxFacts.IsValidIdentifier(name);
}

public static bool IsKeywordRoslyn(string name)
{
    return SyntaxFacts.GetKeywordKind(name) != SyntaxKind.None;
}

সারসংক্ষেপ

  • CodeDomProvider.IsValidIdentifier - সিনট্যাক্স ভ্যালিডেশন (লিগ্যাসি, সীমিত)
  • কাস্টম কিওয়ার্ড সেট - কিওয়ার্ড স্পেসিফিক চেকের জন্য
  • Roslyn (SyntaxFacts) - আধুনিক, কম্পাইলার-গ্রেড অ্যাকিউরেসি (সুপারিশ করা)
  1. পাইথনে প্যালিনড্রোম (Palindrome): কীভাবে একটি সংখ্যা প্যালিনড্রোম কিনা চেক করবেন

  2. পাইথনে একটি স্ট্রিং বৈধ কীওয়ার্ড কিনা চেক করা

  3. পাইথনে স্ট্রিং ASCII-এ আছে কিনা তা কীভাবে যাচাই করবেন?

  4. পাইথনে স্ট্রিং অ্যালফানিউমেরিক কিনা যাচাই করা